question sur struct avec char array

Ci-dessous mon extrait de code

struct encode { char code[MAX]; }a[10]; int main() { char x[]={'3','0','2','5','9','3','1'}; for(i=0;i<1;i++) { printf("%c",x[i]); //This will printout like 3025931 now I want this to be stored in structure. } strcpy(a[0].code,x); // or a[0].code=x;//neither works display(); } void display() { printf("%c",a[0].code); } 

Je veux que la sortie soit comme: 3025931.

Ce que je ne reçois pas en raison d’un type d’affectation incompatible. S’il vous plaît dites-moi où je me trompe.

Je vois deux problèmes ici. La première est que la source de la strcpy est a où elle devrait probablement être x .

La seconde est que x n’est pas terminé par zéro. Les chaînes en C sont des tableaux de caractères terminés par un caractère nul.

Je changerais les deux lignes:

 char x[] = {'3','0','2','5','9','3','1'}; strcpy(a[0].code, a); 

à:

 char x[] = {'3','0','2','5','9','3','1', '\0'}; strcpy(a[0].code, x); 

Voici un programme complet qui vous donne ce que vous voulez (il imprime le numéro deux fois, une fois dans votre boucle intérieure, caractère par caractère et une fois avec le printf pour que vous puissiez voir qu’ils sont identiques):

 #include  #include  #define MAX 100 struct encode { char code[MAX]; } a[10]; int main() { int i, j; char x[] = {'3','0','2','5','9','3','1','\0'}; for(i = 0; i < 1; i++) { for(j = 0; j < 7; j++) { printf("%c", x[j]); } printf("\n"); strcpy(a[0].code, x); } printf("%s\n",a[0].code); return 0; } 

Mise à jour basée sur le commentaire:

Je suis désolé. Je suis nouveau dans C. Mes excuses pour ne pas coller correctement le fragment de code au début: "printf ("% c ", un [0] .code);" n'affiche pas "3025931".

Non, ça ne va pas. En effet, a[0].code est un tableau de caractères (chaîne dans ce cas) et vous devriez utiliser "%s" et non "%c" . Changer le spécificateur de format dans le printf devrait résoudre ce problème particulier.

Ici,

strcpy(a[0].code, a);

vouliez-vous dire

strcpy(a[0].code, x);

…?

De plus, x doit être terminé par null, ou vous devez remplacer strcpy par strncpy ou memcpy et transmettre une longueur.

Cette ligne n’a pas beaucoup de sens:

  strcpy(a[0].code, a); 

Peut-être que vous voulez ceci:

  memcpy(a[0].code, x, sizeof x); a[0].code[sizeof x] = '\0'; 

(La deuxième ligne est nécessaire pour supprimer le code , ce qui en fait une chaîne C appropriée).

Beaucoup de choses ne vont pas dans votre programme. La ligne la plus choquante est la suivante:

 strcpy(a[0].code, a); 

mais il y a aussi d’autres bizarreries, par exemple

  • l’affichage n’est jamais appelé
  • a est seulement assigné (genre de), mais jamais lu (sauf dans display, qui n’est jamais appelé)
  • la boucle i n’a aucun sens

Fondamentalement, ce programme ressemble à du copier-coller par quelqu’un qui n’a aucune idée.