Menu

Copier un tableau char dans un autre tableau char

Messages postés
38
Date d'inscription
mardi 23 avril 2019
Statut
Membre
Dernière intervention
17 mai 2019
- - Dernière réponse : [Dal]
Messages postés
5103
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2019
- 17 mai 2019 à 14:06
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
Afficher la suite 

Votre réponse

1 réponse

Messages postés
5103
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2019
937
0
Merci
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
[Dal]
Messages postés
5103
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2019
937 -
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
Commenter la réponse de [Dal]