int main(void) {
char testStr[50] = "Hello, world!";
char revS[50] = testStr;
}
J'obtiens l'erreur: "initialiseur invalide" sur la ligne avec revS
. Qu'est-ce que je fais mal?
Comme vous ne pouvez pas initialiser comme ça, vous avez besoin d’une expression constante comme valeur d’initialisation. Remplacez-le par:
int main (void) {
char testStr[50] = "Hello, world!";
char revS[50]; strcpy (revS, testStr);
:
}
Ou, si vous vraiment voulez l'initialisation, vous pouvez utiliser quelque chose comme:
#define HWSTR "Hello, world!"
int main (void) {
char testStr[50] = HWSTR;
char revS[50] = HWSTR;
:
}
Cela fournit une expression constante avec une duplication minimale dans votre source.
Les tableaux ne sont pas assignables.
Vous devez utiliser memcpy pour copier le contenu de testStr
à revS
memcpy(revS,testStr,50);
Seules des expressions constantes peuvent être utilisées pour initialiser des tableaux, comme dans votre initialisation de testStr
.
Vous essayez d'initialiser revS
avec une autre variable de tableau, qui est pas une expression constante. Si vous souhaitez copier le contenu de la première chaîne dans la seconde, vous devez utiliser strcpy
.
Un initialiseur pour un char[]
doit être soit une chaîne littérale, soit quelque chose comme {1,2,3,4}
. Il n'est pas autorisé à être le nom d'une autre variable.
Tu es en train de faire
char revS[50] = testStr;
ce qui est faux puisque vous ne pouvez pas affecter char *
à char
.
Essayez revS = testStr;
cela devrait fonctionner.
Sauf si vous envisagez de manipuler le second tableau, vous pouvez également utiliser un pointeur:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = textStr;
printf("%s\n", revS);
}
Si vous voulez devenir vraiment fou, vous pouvez indiquer un emplacement spécifique dans le tableau avec l'opérateur de référence:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = &textStr[5];
printf("%s\n", revS);
}