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 :

Chaine de caractère qui change de valeur


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 77
    Points : 35
    Points
    35
    Par défaut Chaine de caractère qui change de valeur
    Bonjour à tous,

    voilà j'utilise une fonction récursive qui prends en argument une chaine de caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void extract_Inst(instruction *current, char *script){
    ...
    char *tmp;
    ...
    extract_Inst(current->next, tmp)
    }
    Juste avant l'appel à extract_Inst la variable tmp vaut :

    }BEGIN{print "start";print "2eme inst"}END{print "bye";FS=":"}

    et dès l'entrée dans la fonction elle vaut :

    }BEGIN{print "start";p

    Il coupe la fin et ajoute un caractère bizarre.
    Je pensais que c'était une question de taille, mais en rajoutant des malloc et ça change rien

    Vous trouvez ça normal ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Si tu mettais le code complet au moins de ta fonction ca irais mieux pour t'aider ... on est pas devins !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 77
    Points : 35
    Points
    35
    Par défaut
    ok, désolé

    Donc en fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("APPEL AVEC : %s\n", tmp);
    ne correspond pas avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("----------- NOUVELLE ENTREE ------------ AVEC %s\n", script);
    qui arrive juste après l'appel récursif à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extract_Inst(current->next, tmp);
    ça aide plus ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 77
    Points : 35
    Points
    35
    Par défaut
    Alors vous aussi vous trouvez que ça parait bon ?

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    J'ai pas tout lu, mais un truc me saute à l'oeil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void extract_Inst(instruction *current, char *script){
    	char *ptr1,*ptr2;
    	char *suiv, *tmp, *save;
     
    	save = malloc(10*sizeof(char));
    /* ... */ 
    	strcpy(save, script);
    Donc tu es sur que la chaine pointée par script tient dans la zone pointée par save?

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Ah bein c'est sur que }BEGIN{print "start";print "2eme inst"}END{print "bye";FS=":"} ne tient pas dans une zone de 10 caracteres
    Le comportement est indeterminé comme dirait Emdel

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 77
    Points : 35
    Points
    35
    Par défaut
    Ah oui en effet ça marche beaucoup mieux comme ça

    Merci beaucoup

  8. #8
    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 Gruik
    Le comportement est indeterminé comme dirait Emdel
    C'est pas moi, c'est la norme (undefined behaviour).

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

Discussions similaires

  1. Chercher une expression dans une chaine de caractères qui change
    Par blanquettedeveau dans le forum VBScript
    Réponses: 7
    Dernier message: 27/05/2014, 20h29
  2. [RegEx] Comment séparer un chaine de caractère qui change
    Par pierrot10 dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2011, 09h32
  3. Réponses: 1
    Dernier message: 23/04/2007, 13h22
  4. booléan qui change de valeur debug/release
    Par crealinks dans le forum MFC
    Réponses: 3
    Dernier message: 18/08/2006, 17h09
  5. [VB.NET] une chaine de caractère qui devient une propriete
    Par lucie.houel dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/09/2005, 14h10

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