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 :

char * et Allocation de memoire


Sujet :

C++

  1. #1
    Membre éclairé Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par défaut char * et Allocation de memoire
    Bonjour,


    il y a un truc que j aimerais qu on m expliquer sur l allocation de memoire


    genre ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char haystack[] = "This code works.";
    char *haystack2 = "This code dont works.";
     
    char * token;
    token = strtok(haystack, " ");
     
    printf("%s\n",haystack);
    printf("%s\n",haystack2);
     
    token = strtok(haystack2, " ");

    Si je declare haystack avec un char[] aucun probleme avec strtok (ou strcpy c juste un exemple)


    Par contre avec un char* ca marche pas , que fait le compilateur alors puisque je peux quand meme afficher correctement la chaine ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *haystack2 = "This code dont works.";
    printf("%s\n",haystack2);

    Je sais qu en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     char string[] = "This code works";
            char *haystack = NULL;
            char * token = NULL;
            haystack = (char*) malloc (sizeof(string));
            strcpy(haystack,string);
            token = strtok(haystack, " ");
    Je resoud mon probleme mais j aimerais comprendre ce qui se passe exactement au niveau du code quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *chaine ="quelque chose"
    qui fait que les fonctions comme strtok plante

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut Re: char * et Allocation de memoire
    Citation Envoyé par venomelektro
    Par contre avec un char* ca marche pas , que fait le compilateur alors puisque je peux quand meme afficher correctement la chaine ?
    Dans le cas du char *, tu crée un pointeur vers une chaine stockée dans une zone généralement en lecture seule (zone de données initialisées, ça dépend des OS), avec [] tu déclare un tableau dont la taille est celle de la chaine, et ce tableau est initialisé avec ta chaine (c'est comme un malloc + strcpy). Ta chaine n'est pas contenue dans la zone de données initialisée, mais du code est généré pour la créer dans ton tableau.
    D'ailleurs, c'est const char * = qu'il faut utiliser dans ce cas, ce qui évite les problèmes.

  3. #3
    Membre éclairé Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par défaut
    ok merci bien

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Au passage, en C++ on s'embête bien moins en utilisant std::string et ses fonctions membres (findxxx, substr, ...).

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

Discussions similaires

  1. Allocation de memoire
    Par remi77 dans le forum Windows XP
    Réponses: 5
    Dernier message: 22/06/2007, 17h01
  2. ERROR allocation de memoire
    Par insa59 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 15/03/2007, 09h50
  3. allocation de memoire pour char**
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 03/04/2006, 20h01
  4. outil permettant de tracker les alloc/dealloc memoire
    Par bob8181_2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/09/2005, 19h57
  5. Allocation de memoire
    Par zakjo_developper dans le forum C
    Réponses: 16
    Dernier message: 08/04/2005, 13h46

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