Copier un tableau char dans un autre tableau char
Résolu
emmy_2019
Messages postés
63
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai une structure comme ceci:
Et une autre structure :
Je veux copier la valeur de Result[i].Heure dans Comptage[i].Heure, J'ai essayé avec memcpy, strcpy mais j'ai eu une segmentation Fault.
Avez-vous une idée svp?
Merci
J'ai une structure comme ceci:
typedef struct {
char Heure[80];
int ID;
int Nombre_Mont;
int Nombre_Desc;
}Comptage;
Et une autre structure :
typedef struct {
char Heure[80];
char *receive;
}Result;
Je veux copier la valeur de Result[i].Heure dans Comptage[i].Heure, J'ai essayé avec memcpy, strcpy mais j'ai eu une segmentation Fault.
for( i=1; i<count; i++)
{
GetXmlTagValue(Result_[i].receive,"DoorID",Tag1,TagValue);
GetXmlTagValue(Result_[i].receive,"In",Tag1,TagValue1);
GetXmlTagValue(Result_[i].receive,"Out",Tag1,TagValue2);
LOG_INFO("Server: i=%d, Time = %s , ID =%d Nombre_Mont =%d Nombre_Desc=%d", i, Result_[i].Heure, atoi(TagValue), atoi(TagValue1),atoi(TagValue2));
//Count_Pass[i].Heure = malloc(81);
//strcpy(Heure, Result_[i].Heure);
//strcpy(Count_Pass[i].Heure, Heure);
memcpy(Count_Pass[i].Heure, Result_[i].Heure,80);
//memcpy(Count_Pass[i].Heure, Result_[i].Heure, 81);
Count_Pass[i].ID = atoi(TagValue);
Count_Pass[i].Nombre_Mont = atoi(TagValue1);
Count_Pass[i].Nombre_Desc = atoi(TagValue2);
LOG_INFO("Server: ID= %d Nombre de Montée=%d, Nombre de Desc=%d", Count_Pass[i].ID, Count_Pass[i].Nombre_Mont, Count_Pass[i].Nombre_Desc);
}
Avez-vous une idée svp?
Merci
Configuration: Windows / Chrome 74.0.3729.157
1 réponse
-
Salut emmy_2019,
Si ce que tu veux copier se trouvant dans un tableau dechar Heure[80];
est une chaîne C, c'est à dire une suite de char stockés dans le tableau y compris le caractère terminateur de chaîne'\0'
, tu devrais utiliserstrcpy()
, qui ne devrait pas poser de problèmes pour copier la chaîne vers un autre tableau de char de même taillestrcpy(dest, orig)
.
Si ce qui est stocké n'est pas une chaîne C, utilisememcpy(dest, orig, sizeof(dest));
sur ces deux tableaux (de typechar Heure[80];
selon ce que tu dis).
Si tu as une erreur de segmentation de mémoire, alors que tu te trouves dans les hypothèses ci-dessus, ton erreur doit venir d'autre chose que tu fais et qui corrompt la mémoire, ou les hypothèses que tu décris ne correspondent pas à ce que tu fais réellement.
Dal-
par exemple :
#include <stdio.h> #include <string.h> typedef struct { char Heure[80]; int ID; int Nombre_Mont; int Nombre_Desc; }Comptage; typedef struct { char Heure[80]; char *receive; }Result; Result Res[2]; Comptage Cpt[2]; int main(void) { /* on met des trucs dans le membre char Heure[80]; * du tableau de struct Result */ strcpy(Res[0].Heure, "il est tard"); strcpy(Res[1].Heure, "il est tôt"); /* on copie cela dans le tableau de struct Comptage */ strcpy(Cpt[0].Heure, Res[0].Heure); strcpy(Cpt[1].Heure, Res[1].Heure); /* on liste le contenu du membre char Heure[80]; * du tableau de struct Comptage */ printf("Cpt[0].Heure = %s\n", Cpt[0].Heure); printf("Cpt[1].Heure = %s\n", Cpt[1].Heure); return 0; }
fonctionne sans aucun problème :
$ gcc -Wall 36027622.c $ ./a.out Cpt[0].Heure = il est tard Cpt[1].Heure = il est tôt
-
-
-