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   -
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

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
    2. emmy_2019 Messages postés 63 Statut Membre
       
      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
    3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Super. Ce problème est donc résolu :-)
      0