2009-12-16 6 views
0

Voici mon extrait de codequestion sur struct avec tableau de caractères

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'assignation incompatible. S'il vous plaît dites-moi où je vais mal.

+0

... au nom de codethulhu est ce que 'strcopy' est censé faire? –

+0

Pourquoi avez-vous une fonction appelée affichage que vous n'utilisez même pas? –

+0

essayez d'utiliser votre variable "i" dans strcpy (a [i] .code, a); au lieu de coder dur à 0? – EToreo

Répondre

2

Je vois deux problèmes ici. Le premier est que la source du strcpy est a où il devrait probablement être .

La seconde est que x n'est pas à terminaison nulle. Les chaînes dans C sont des tableaux de caractères à terminaison nulle.

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 en fait le numéro deux fois, une fois dans votre intérieur boucle caractère par caractère et une fois avec le printf de sorte que vous pouvez voir qu'ils sont les mêmes):

#include <stdio.h> 
#include <string.h> 
#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 un commentaire:

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

Non, ce ne sera pas le cas. C'est parce que a[0].code est un tableau de caractères (chaîne dans ce cas) et vous devez utiliser "%s", pas"%c". Modifier le spécificateur de format dans le printf devrait résoudre ce problème particulier.

+0

... et bien sûr que la nouvelle initialisation de 'x' pourrait être écrite de manière équivalente sous la forme' char x [] = "3025931"; ' – caf

+0

Je suis désolé je suis nouveau à 'c' je m'excuse de ne pas coller l'extrait de code correctement au début .. affichage vide() { printf ("% c", a [0] .code); } n'affiche pas "3025931" – meg

+0

paxdiablo merci pour vos réponses .. que se passe-t-il si j'ai affaire avec tableau int comme struct encode { int code [MAX]; } a [10]; int x [] = {'3', '0', '2', '5', '9', '3', '1'}; devrais-je utiliser strcpy après la conversion de int [] en char []? – meg

0

Ici,

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

avez-vous dire

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

...?

En outre, x besoins à nulle fin, ou vous devez remplacer strcpy avec strncpy ou memcpy et passer une longueur.

0

Cette ligne ne fait 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 NUL à la fin code, ce qui en fait une chaîne appropriée C).

0

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

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

mais il existe également d'autres bizarreries, par ex.

  • affichage est jamais appelé
  • un est uniquement affecté (genre de), mais jamais lu (sauf dans l'affichage, qui est jamais appelé)
  • la boucle i n'a pas de sens

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

+1

"Fondamentalement, ce programme ressemble à copier-coller par quelqu'un qui n'a aucune idée." Est-ce nécessaire? – ChaosPandion

+0

ChaosPandion: un fait est un fait –

+0

BTW, le PO a été lourdement édité, il était pire au début –