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

 C Discussion :

Paramêtre de strcat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut Paramêtre de strcat
    Bonjour, n'ayant pas trouvé satisfaction dans le cours (et étant un peu préssé) je viens vous demander conseils.

    A la base, j'étudie le C++ depuis 2 ans, et maintenant, l'établissement où je suis nous font faire du C.. sute logique, bref.

    Du coup je découvre la gestion des chaînes de caractères et me retrouvent confronter à un p'tit problème.

    j'ai extrait un car à l'aide de getc

    Je peux ensuite l'affiché grâce à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *temp_str;
    int car;
    car = getc(pt_de_fic);
     
    fputc(car,stdout);
    Je voudrais ensuite le concaténer à la chaine de car temp_str existante.

    Soit,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcat (Temp_str, (char *) car);
    Et là, ça ne fonctionne pas, jj'obtiens un code retour "strange" et je ne vois pas comment lui faire passer autrement cet int sous forme de pointeur de char. Merci de votre aide.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Tout à fait normal : ton caractère (car) est, justement, un caractère et non pas une chaîne, il n'y a pas de zéro terminal.

    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *temp_str;
    int car;
    char tmp[2] ;
    car = getc(pt_de_fic);
    tmp[0] = (char)car ;
    tmp[1] = 0 ; /* zéro terminal. */
    strcat (Temp_str, tmp);
    Ceci étant dit, faudrait voir aussi ce que tu veux faire à l'origine, parce qu'il est fort probable qu'un code de lecture de ligne directe (fgets) ou de construction de chaîne à la volée avec ajout d'un zéro terminal à la fin du traitement (en gros, "Temp_str[i++]=(char)car;") soit bien plus pratique qu'appeler strcat...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Je te remercie, mais quel souk pour une extraction de caractère et concatenation à un string..

    Ensuite, mon objectif est de lire char par char jsuqu'au premier "espace" (tout caractère d'espace).

    Il m'est clairement indiqué de ne pas lire ligne par ligne.

    Merci. Je test et je mettrais résolus ensuite.

    ---

    EDIT : Le retour de strcat est identique à précedement, (-1073741819). Pourtant, j'ai reutilisé au mot près le code que tu as cité.

    (ma prochaine réponse sera un peu tardive, je dois partir en cours) merci à ceux qui se pencherons là dessus.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Ben "Xscanf("%s",Temp_str)" va très exactement faire ça : lire une chaîne et s'arrêter au premier espace...

    (Remplace le "X" par f pour un fichier, et rien pour l'entrée standard).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu peux aussi, de manière plus simple faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char car[2] ;
     
    car[1]='\0';
     
    ....
    car[0] = getc(pt_de_fic);
     
    strcat (Temp_str, car);
    ou bien , si ta chaîne a bien été initialisée, avec ton char aà toi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    l = strlen(Temp_str);
    Temp_str[l]= car;
    Temp[l+1]='\0';
    La difficulté que tu rencontres est que tu mélanges 2 concepts : un caractère, et une chaîne de caractères...



    De toutes façons, là ta chaîne n'est pas dimensionnée, donc ça ne mrchera pas..

    Et si elle l'est, tu peux simplement stocker dans la chaîne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l = 0
    Temp_str[l++] = getc(pt_de_fic);

  6. #6
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Oui, ma principale erreur a été de ne pas spécifier de taille à mon tab de char. *boulette*.

    Ensuite, pour ta solution Mac LAK, je la testerais plus tard, mais prend t'elle seulement l'espace ou également les caractères d'échappements tel que \n \t ?
    en tous cas mon p'tit soft fonctionne pour l'instant. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  2. [xmlrad] Pb de paramètre ?
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 07/01/2003, 14h37
  3. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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