Copier un tableau char dans un autre tableau char [Résolu/Fermé]

Signaler
Messages postés
59
Date d'inscription
mardi 23 avril 2019
Statut
Membre
Dernière intervention
16 septembre 2019
-
Messages postés
5383
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juillet 2020
-
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

1 réponse

Messages postés
5383
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juillet 2020
884
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 61473 internautes nous ont dit merci ce mois-ci

Messages postés
5383
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juillet 2020
884
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
Messages postés
59
Date d'inscription
mardi 23 avril 2019
Statut
Membre
Dernière intervention
16 septembre 2019

Merci beaucoup Dal , je viens de voir ton commentaire oui c'est bien avec strcpy je l'ai fait et il est bien fonctionné.
Messages postés
5383
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juillet 2020
884
Super. Ce problème est donc résolu :-)