IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Pb avec fonction strcat ?


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut Pb avec fonction strcat ?
    bonjour,

    j'ai du ma a concaténer 2 chaîne, la la fonction strcat me renvoie l'erreur : SIGSEGV

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    int main () {
     
      int fd;
      char *num;
      char c;
      struct termios  termios_p;
     
      /* Ouverture de la liaison serie */
      fd = open(PORT, O_RDWR | O_NOCTTY);
      if (fd <0) {perror(PORT); exit(-1); }
     
      /* Lecture des parametres courants */     
      tcgetattr(fd,&termios_p);            
      /* On ignore les BREAK et les caracteres avec erreurs de parite */ 
      termios_p.c_iflag = IGNBRK | IGNPAR;   
      /* Pas de mode de sortie particulier */   
      termios_p.c_oflag = 0;     
      /* Liaison a 9600 bps avec 8 bits de donnees et une parite paire */
      termios_p.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
      /* Mode non-canonique avec echo */ 
      termios_p.c_lflag = ECHO; 
      /* Caracteres immediatement disponibles */
      termios_p.c_cc[VMIN] = 1;
      termios_p.c_cc[VTIME] = 0;
      /* Sauvegarde des nouveaux parametres */ 
      tcsetattr(fd,TCSANOW,&termios_p);
     
      /* Boucle de lecture du port  */
      while(1){    
     
        strcpy (&c, "");
        strcpy (&num, "");    
     
        while(c!=0x0a){
          read(fd, &c, 1);
          printf("%c\n",c);
          strcat (num,&c);
        }    
     
        printf("%s\n",num);  
      }
     
    close(fd);   
     
    return 0;
    }
    Bon alors voilà c'est le strcat dans le 2nd while qui me pose problème.

    Le but du programme et de récupérer caractère par caractère ce qui passe sur le port série et concaténer ces caractère jusqu'à la lecture d'un \n (0x0a) (2ème boucle while). Une fois le \n détecté on efface la chaine et on recommence (1ère boucle while).

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 335
    Points : 130 271
    Points
    130 271
    Billets dans le blog
    1
    Par défaut
    Il y a plein de grosses erreurs.

    strcpy(&c, "");

    c est un caractère. strcpy() travaille sur des chaînes de caractères. Même si là le problème est invisible, ce n'est pas du tout comme ça qu'il faut faire.

    strcpy(&num, "");

    Deux problèmes :

    a) num est un pointeur vers une chaîne de caractère. &num est un pointeur vers un pointeur vers une chaîne de caractère ! Tu n'as pas à mettre un & ici !

    b) num n'est pas alloué... ai-je besoin d'expliquer davantage pourquoi ça plante ?

    Si tu utilises gcc, j'espère que tu utilises l'option -Wall qui permet de détecter souvent ce genre d'erreurs.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok merci !

    Dur dur de s emettre au c quand on vient du monde vb.

    pour le petit b) oui je veu bien que tu explique un peu plus, merci.

    Pour le -wall je ne le metter pas mais je vais le faire mintenant.

  4. #4
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 335
    Points : 130 271
    Points
    130 271
    Billets dans le blog
    1
    Par défaut
    C'est -Wall (avec un grand W). Cela t'active plein d'avertissements.

    Bon ben quand tu as besoin d'une chaîne de caractères, tu as en gros deux possibilités :

    a) Soit tu l'alloues statiquement :
    b) Soit tu l'alloues dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* chaine;
    chaine = malloc(100);
    Si tu alloues dynamiquement, il te faudra libérer de l'espace mémoire après. Bien sûr si tu oublies d'allouer, le programme va écrire n'importe où d'où le SIGSEGV.

    Donc sauf si tu as un besoin précis, je te conseille la méthode a). Remarque que tu dois toujours préciser la taille maximale de la chaîne de caractères.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok merci !

    J'essaye de suite avec la méthode a).

    Question tout de même pour ma variable cj suppose que je laisse çà

    Puisque c'est un seul caractère.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Pb avec fonction strcat ?
    Citation Envoyé par olivier857
    j'ai du ma a concaténer 2 chaîne, la la fonction strcat me renvoie l'erreur : SIGSEGV
    Il y a des précautions d'emploi.
    • Le tableau de char de destination doit être modifiable
    • Il doit être initialisé.
    • Il doit être de taille suffisante
    • La source doit être un chaine valide.

    Voici le code :
    Les critères énoncés ne sont pas respéctés...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ca marche toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    int main () {
     
      int fd;
      char num[100];
      char c;
      struct termios  termios_p;
     
      /* Ouverture de la liaison serie */
      fd = open(PORT, O_RDWR | O_NOCTTY);
      if (fd <0) {perror(PORT); exit(-1); }
     
      /*********************   Configuration du port serie   *********************/
      /* Lecture des parametres courants */                                      //
      tcgetattr(fd,&termios_p);                                                  //
      /* On ignore les BREAK et les caracteres avec erreurs de parite */         //
      termios_p.c_iflag = IGNBRK | IGNPAR;                                       //
      /* Pas de mode de sortie particulier */                                    //
      termios_p.c_oflag = 0;                                                     //
      /* Liaison a 9600 bps avec 8 bits de donnees et une parite paire */        // 
      termios_p.c_cflag = B9600 | CS8 | CLOCAL | CREAD;                          //
      /* Mode non-canonique avec echo */                                         // 
      termios_p.c_lflag = ECHO;                                                  //
      /* Caracteres immediatement disponibles */                                 //
      termios_p.c_cc[VMIN] = 1;                                                  //
      termios_p.c_cc[VTIME] = 0;                                                 //
      /* Sauvegarde des nouveaux parametres */                                   //
      tcsetattr(fd,TCSANOW,&termios_p);                                          //
      /***************************************************************************/
     
      /* Boucle de lecture du port */
      while(1){
     
        c="";
        strcpy (num, "");
     
        while(c!=0x0a){
          read(fd, &c, 1);
          printf("%c\n",c);
          strcat (num,&c);
        }
     
        printf("%s\n",num);  
      }
     
    /* Fermeture de la liaion serie */
    close(fd);   
     
    return 0;
     
    }

  8. #8
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 335
    Points : 130 271
    Points
    130 271
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par olivier857
    Ca marche toujours pas.
    Précise s'il te plaît.

    Question tout de même pour ma variable cj suppose que je laisse çà

    Puisque c'est un seul caractère.
    Si tu veux, mais alors il ne faut pas utiliser les fonctions de chaînes de caractères dessus. En particulier, ton c = "" ne compilera pas (tu tentes d'assigner une chaîne de 0 caractère à une variable caractère ; de manière générale ne tente jamais d'affecter une chaîne de caractère avec "="). Si tu voulais mettre le caractère nul dans c, tu aurais dû l'écrire c = '\0';.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok

    Pourrais tu reprendre mon code et réécrire les déclarations de variable et mais 2 boucles while comme toi tu l'aurai fait. Ne prend pas forcement en compte ce que moi j'ai écris, je veux juste voir de quel manière tu t'y serais pris, si tu le veux bien.

    Merci !

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier857
    Pourrais tu reprendre mon code et réécrire les déclarations de variable et mais 2 boucles while comme toi tu l'aurai fait. Ne prend pas forcement en compte ce que moi j'ai écris, je veux juste voir de quel manière tu t'y serais pris, si tu le veux bien.
    C'est bien sûr techniquement possible, mais est-ce souhaitable ? Ne vaudrait-il pas mieux que tu reflechisses plus et que tu trouves la solution par toi même ?

    Ce que tu veux faire, c'est lire les caractères un à un et constituer une chaine. La condition d'arrêt est le fin de ligne.

    Je propose une autre approche : le plus simple est de gérer un tableau de char et un index d'écriture.

    Au début, l'index vaut 0, et le premier caractère est donc placé en a[0], puis on incrémente l'index, on lit le caractère suivant on le place en a[1] etc. Evidemment, on évite de déborder et on garde une place pour le 0 final qui ne peut pas être à plus que N-1.

    Quand on a reçu la fin de ligne, on termine la chaine avec un 0 et on l'envoie au traitement (on peut choisir de garder la fin de ligne ou non...)

    En fait, en gros, on a réécris fgets()...
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok d'accord je vois l'approche, ca me parait effectivement mieux.

    Je vais essayer de faire çà.

    Merci !


    J'aurais juste une question pour partir sur une bonne base. Comment faut t'il que je déclare le tableau de char, en dynamique ou en statique (sachant que je connais environ la taille que le tableau prendra même si celui-ci et quelque peu variable).

    char *a[]={};
    char a[30]={};
    char a[30]="";
    ou autre

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier857
    J'aurais juste une question pour partir sur une bonne base. Comment faut t'il que je déclare le tableau de char, en dynamique ou en statique (sachant que je connais environ la taille que le tableau prendra même si celui-ci et quelque peu variable).

    char *a[]={};
    N'existe pas.
    char a[30]={};
    N'existe pas.
    char a[30]="";
    ou autre
    Si tu connais la taille max de ce que tu as à recevoir, une tableau de taille fixe suffit (prévoir le 0 final). Il n'est pas indispensable qu'il soit initialisé.
    Si la taille peut être très variable, voir imprévisible, il faut prévoir un mécanisme souple bassé sur malloc() / realloc() à la demande. On évite de réallouer pour un caractère. Trop cher, trop lent... On utilise souvent une stratégie de doublage. On commence avec une taille raisonnable (disons 32, et dès que ça devient nécessaire, on double la taille (64, 128 etc.). C'est un algo assez amusant...
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Bon alors voilà ce que ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      int fd,i;
      char a[30];
      char num[30];
      char c;
      struct termios  termios_p;
     
      /* Ouverture de la liaison serie */
      fd = ...
      ...
      termios_p.c_iflag = ...
      ...
     
      /* Boucle de lecture du port */
      while(1){
        tcflush(fd, TCIFLUSH);
        c='\0';
        i=0;
        a[30]="";
        while(c!=0x0a){
          read(fd, &c, 1);
          a[i]=c;
          printf("%c\n",c);   //affichage caractère par caractère
          i++;     
        }
        printf("%s\n",a);  //affichage chaine complète
      }
    J'espère que je ne vais pas encore me faire tirer les oreilles.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Le programme fonctionne a peu près mais j'ai plein de caractère parasites.

    Résultat du prog :
    0
    0
    0
    0
    0
    0
    0
    1
    5
    8
    6



    00000001586
    tp@ðz@(ûÿ¿hûÿ¿h@@e@ûÿ¿Xûÿ¿6Î@

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier857
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      int fd,i;
      char a[30];
      char c;
     
        c='\0';
        i=0;
        a[30]="";
        while(c!=0x0a){
          read(fd, &c, 1);
          a[i]=c;
          printf("%c\n",c);   //affichage caractère par caractère
          i++;     
        }
        printf("%s\n",a);  //affichage chaine complète

    • a[30]=""; n'a aucun sens. Tu as compilé ?
    • manque le 0 final
    • le dépassement n'est pas testé.

    J'ai pourtant expliqué ce qu'il fallait faire. Je parle aux murs ou quoi ?
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier857
    Le programme fonctionne a peu près mais j'ai plein de caractère parasites.
    Et ça t'étonnes ? Tu ne suis pas les consignes, c'est normal...
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Mdrrrrr la photo, pris a mon piège -> fallais pas donné de mauvaise idée j'avoue.

    Je te jure que je t'écoute, je n'aime pas enmerder les gens pour rien , ca m'interesse beaucoup et j'essaye de comprendre un maximum de chose, mais j'avoue que j'ai beaucoup de mal. J'essaye de faire ce que vous me dite mais je ne suis peut être pas toutes les consignes car je ne les comprend pas toutes c'est tout.

    Newbie détecté --> enfin je crois que ca fait lgt que j'étais déjà reperé. lol

    Bon pour en revenir a mon pb :

    le a[30]=""; ne pose aucun problème à la compilation même avec le -Wall.
    Mais je te crois sans pb.
    Cependant j'ai du mal à comprendre l'histoire du dépassement avec le 0 final. par contre je comprend bien que mon pb de caractère parasites doit venir de là.

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier857
    le a[30]=""; ne pose aucun problème à la compilation même avec le -Wall.
    • a est un tableau de 30 char. On ne peut indexer de 0 - 29. Un index 30 est hors limites. Comportement indéfini.
    • "" est un ponteur sur char. Tu essayes de faire rentrer un pointer dans un char. C'est absurde.
    • Un compilateur correct signale le problème
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       
      main.c:13: warning: assignment makes integer from pointer without a cast
      Linking console executable: D:\dev\ed02\cb\ed02.exe
      Process terminated with status 0 (0 minutes, 6 seconds)
      0 errors, 1 warnings
    • Je ne sais pas ce que tu cherches à faire, mais c'est inutile ! (Tu vas de toutes façons écrire par-dessus).

    Cependant j'ai du mal à comprendre l'histoire du dépassement avec le 0 final. par contre je comprend bien que mon pb de caractère parasites doit venir de là.
    Rappel : une chaine de caractères est un tableau de char terminé par un 0.

    Donc une fois que tu as placé les caractères dans le tableau, il faut placer un 0 après le dernier caractère (facile, c'est à la valeur courante de l'index), afin de terminer correctement la chaine, sinon, le comportement est indéfini. Tout peut arriver.

    D'autre part, avant d'écrire dans le tableau, il faut s'assurer qu'il y a la place et qu'on est pas entrain d'écrire au-dela des limites (penser qu'il faut aussi une place pour le 0 final). Tout dépassement entraine un comportement indéfini.

    Si c'est pas clair, pose des questions.
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Bon alors on va y aller étape par étape.

    Citation Envoyé par Emmanuel Delahaye
    Je ne sais pas ce que tu cherches à faire, mais c'est inutile ! (Tu vas de toutes façons écrire par-dessus).
    Alors je voulais tout simplement essayer de vider le tableau a[], car je peu très bien lire et stocker dans a[] des chaines de caractère de longueur sensiblement différentes. Donc je veux éviter d'avoir un résidu de caractère dans mon tableau avant de relancer la boucle. (cas ou la lecture précédente ést plus longue que la courante, si la lecture x-1 fait 15 caractères et la lecture x en fait 13, je veu éviter de récupérer les caractères 14 et 15 de la lecture x-1).

    J'ai peut être totalement tord, je ne sais pas. Je cherche juste a initialiser le tableau en le vidant.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Emmanuel
    Rappel : une chaine de caractères est un tableau de char terminé par un 0.

    Donc une fois que tu as placé les caractères dans le tableau, il faut placer un 0 après le dernier caractère (facile, c'est à la valeur courante de l'index), afin de terminer correctement la chaine, sinon, le comportement est indéfini. Tout peut arriver.
    Donc si je comprend bien apres ma boucle qui récupère caractère par caractère et les stock dans mon tableau je dois ajouter un 0 dans ce tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      while(c!=0x0a){
          read(fd, &c, 1);
          a[i]=c;
          printf("%c\n",c);   //affichage caractère par caractère
          i++;     
        } 
        a[i]="0";    ou   strcat(a,"0");
    Bon j'espère t'avoir compris.

    Sinon il n'existe pas des fonctions qui font ca du style nemset ?

Discussions similaires

  1. Erreur avec la fonction strcat
    Par pascal1 dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2009, 16h48
  2. Problème avec la fonction strcat
    Par saddamtohmto dans le forum MATLAB
    Réponses: 10
    Dernier message: 18/07/2007, 07h57
  3. Problème avec la fonction Strcat
    Par totoc1001 dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/01/2007, 21h34
  4. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42
  5. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo