web-dev-qa-db-fra.com

Je reçois un "initialisateur invalide", qu'est-ce que je fais mal?

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?

21
deadghost

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.

24
paxdiablo

Les tableaux ne sont pas assignables.

Vous devez utiliser memcpy pour copier le contenu de testStr à revS

memcpy(revS,testStr,50);
7
Tom

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.

4
pb2q

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.

2
Gareth McCaughan

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.

1
Kinjal Patel

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);
}
0
Pescolly