[iniatialisation d'un pointeur de chaine dans une structure]
Bonjour, Voci mon problème:
je vous expose mon problème avec ce bout de code. je veux initialiser l'element nom de la struct compte.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| typedef struct
{
char *nom ;
int somme;
}compte;
typedef struct
{
compte listcompte[10];
int nbCompte;
}tab;
main()
{
int i=0;
char ch[20]="bonjour";
tab ensemble;
strcpy(ensemble.listcompte[i].nom, ch);
// Impossible de faire cette instruction de copie. Je veux
//initialiser l'element nom de compte! Je n'arrive pas
return 0;
} |
Merci Pour l'Aide
Re: [iniatialisation d'un pointeur de chaine dans une struct
Citation:
Envoyé par yamnetouaga
je vous expose mon problème avec ce bout de code.
D'abord, :tagcode: ensuite,
Citation:
Compiling: main.c
main.c:13: warning: return type defaults to `int'
main.c: In function `main_':
main.c:18: error: implicit declaration of function `strcpy'
main.c:18: warning: nested extern declaration of `strcpy'
<internal>:0: warning: redundant redeclaration of 'strcpy'
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 2 warnings
Ce serait bien de poster du code compilable...
Citation:
je veux initialiser l'element nom de la struct compte.
Initialiser ? C'est à dire ?
Citation:
Code:
1 2 3
| typedef struct
{
char *nom ; |
Ici, on a un pointeur non initialisé... danger...
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
int somme;
}compte;
typedef struct
{
compte listcompte[10];
int nbCompte;
}tab;
main()
{
int i=0;
char ch[20]="bonjour";
tab ensemble; |
et là, la structure et par conséquent ses membres, ne sont pas initialisés.
Citation:
Code:
1 2 3 4 5 6
| strcpy(ensemble.listcompte[i].nom, ch);
// Impossible de faire cette instruction de copie. Je veux
//initialiser l'element nom de compte! Je n'arrive pas
return 0;
} |
Merci Pour l'Aide
"Je n'arrive pas", c'est pas très scientifique...
En fait tu cherches à copier dans une zone non définie. Avant d'utiliser un pointeur (donc la zone pointée par celui-ci), celui-ci doit contenir une adresse valide. Ici, ce n'est pas le cas. Il faut donc commencer par allouer la taille nécessaire (malloc(), par exemple). Attention, une chaine se termine par un 0...
http://emmanuel-delahaye.developpez.....htm#pointeurs
http://emmanuel-delahaye.developpez....tes.htm#malloc
iniatialisation d'un pointeur de chaine dans une structure
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char *nom;
int solde;
}compte;
typedef struct
{
compte listClients[10];
}tabClients;
//fonction pour introduire les donnees
tabClients introClient(int nbClients)
{
tabClients b;
int i, j;
char ch[21];
for(i=0 ; i<nbClients ; i++)
{
printf("donner le nom\n");
scanf("%s", ch);
strcpy(b.listClients[i].nom, ch); // le problème est ici, je
//mettre le nom saisie dans la variable
printf("donner son numero \n");
scanf("%s", b.listClients[i].solde);
/* //j'ai meme essayer ça j'avais pas pense a malloc
for(j=0; ch[j]!='\0'; j++)
{
*(b.listc[i].nom + j) =ch[j];
}
*/
}
return b;
}
int main()
{
tabClients ct;
char str[10];
int i=3;
ct = introClient(i);
for(i=0 ; i<5 ; i++)
{
printf("%d ",ct.listClients[i].solde);
printf("%s\t",ct.listClients[i].nom);
}
system("PAUSE");
return 0;
} |
Voici tout le code compilable,
J'avais pas pensé à malloc, mais ne pourrais-je pas l'éviter par d'autres astuces! Encore merci pour l'aide.