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 :

Comportement vraiment bizarre avec les chaines de caractères


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comportement vraiment bizarre avec les chaines de caractères
    Bonjour
    J'ai un petit programme que je ne comprends pas
    Lorsque j'enlève le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("in the bar()\n");
    le second printf fonctionne. Mais si je le commente, je vois une ligne vide.
    Que se passe t-il en fait?

    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
     
    #include <stdio.h>
    #include <string.h>
     
    void *foo()
    {
       char str[256];
       return str;
    }
     
    void bar()
    {
       char *str = foo();
       printf("in the bar()\n");
       strcpy(str, "What's that ?");
       printf("%s\n", str);
    }
     
    int main(int argc, char **argv)
    {
       bar();
     
       return 0;
    }

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Points : 870
    Points
    870
    Par défaut
    Salut,

    Il se passe que tu écris n’importe où en mémoire, et que donc c’est un comportement indéfini et que tout peut arriver, même les choses les plus bizarres et imprévisibles.

    Le tableau str est local à la fonction foo. En dehors de foo, la mémoire à l'adresse de str ne t’appartient plus.
    Or, tu renvoies cette adresse à la fonction bar et tu écris dedans. À partir de là, tout peut arriver, y compris le comportement que tu cites.

    Au passage, un compilateur bien réglé devrait émettre un warning sur ce genre de chose.

  3. #3
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 853
    Points : 2 166
    Points
    2 166
    Par défaut
    Je rajoute a la reponse de grim7reaper que si tu veux renvoyer une chaine de caractere d'une autre fonction, il faudra que tu lui alloues de la memoire avec la fonction malloc.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Ou bien déclarer la variable locale "static" (ce qui dans la plupart des cas est moins propre qu'une allocation dynamique).

Discussions similaires

  1. probleme avec les chaines de caractères
    Par Mr_Nouyes dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 25/01/2013, 16h41
  2. [débutant] Problême avec les chaines de caractères
    Par Micky_du_57 dans le forum C++
    Réponses: 2
    Dernier message: 03/06/2007, 19h03
  3. pb avec les chaines de caractères
    Par KingKongOfFighter dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2007, 15h52
  4. Jouer avec les chaines de caractères ?
    Par vr900 dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/04/2007, 16h26
  5. [TRANSAQ SQL] INSERT comportement bizarre avec les REAL
    Par argyronet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/12/2005, 11h47

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