Copier un tableau char dans un autre tableau char

Résolu/Fermé
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019 - 17 mai 2019 à 10:12
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 21 mai 2019 à 12:00
Bonjour,

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
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 17 mai 2019 à 14:31
Salut emmy_2019,

Si ce que tu veux copier se trouvant dans un tableau de
char 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 utiliser
strcpy()
, qui ne devrait pas poser de problèmes pour copier la chaîne vers un autre tableau de char de même taille
strcpy(dest, orig)
.

Si ce qui est stocké n'est pas une chaîne C, utilise
memcpy(dest, orig, sizeof(dest));
sur ces deux tableaux (de type
char 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
1
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 17 mai 2019 à 14:08
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
0
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019
21 mai 2019 à 11:14
Merci beaucoup Dal , je viens de voir ton commentaire oui c'est bien avec strcpy je l'ai fait et il est bien fonctionné.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
21 mai 2019 à 12:00
Super. Ce problème est donc résolu :-)
0