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 :

Probleme de tableau de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut Probleme de tableau de caractère
    Bonjour,
    j'ai un problème quand j'utilise un tableau de caractère.
    Je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *Mot ="truc";
    Mot[0]='c';
    Ca fait une erreur ...Mais quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char Mot[5] ="truc";
    Mot[0]='c';
    Ca marche. Le problème vient de ou?
    Si quelqu'un pouvait m'aider. D'avance merci.

  2. #2
    Membre confirmé Avatar de florianjoy54
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 155
    Par défaut
    quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char Mot[5] = "truc";
    tu attribues une taille a ton tableau. qui est en fait un char *.

    Donc quand tu déclare un char * Mot;

    il faut aussi que tu lui alloue de la mémoire. Une taille.
    donc il faut que tu utilises malloc

    Mot = malloc(5 * sizeof(char

    est ce que ton erreur était de type segmention fault ou en français erreur de segmentation ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut Re
    En fait le problème vient de la deuxieme ligne pas de la primière.
    Oui c'est une erreur de segmentation.

  4. #4
    Membre confirmé Avatar de florianjoy54
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 155
    Par défaut
    il faut juste que tu fasse un malloc et ca fonctionnera. Sinon ca veut dire que tu tentes d'accéder a un espace qui n'est pas alloué, qui n'est pas destiné a ta variable.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut Re
    Pourtant il existe quand meme cette variable dans le cas ou je fait char *Mot ="truc" parce que lorsque je fais printf de la variable j'ai bien le mot truc qui apparait. Ca viendrait de ou le probleme ??
    La variable est stocké dans un endroit de la mémoire où on a pas le droit de touché ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *Mot ="truc";
    Mot[0]='c';
    Mot est un pointeur (pas un tableau) pointant vers une chaine de caractères contenant "truc" et cette chaine de caractères se trouve dans une zone en lecture seule.
    Si tu veux modifier un caractère dedans, ça plante.

    Là, par contre, tu créées un tableau (et non plus un pointeur) sur la pile d'exécution, qui est initialisé avec "truc".
    Comme il se trouve dans une zone qui permet aussi bien la lecture que l'écriture, tu peux donc le modifier comme bon te semble.

    Ne pas confondre tableau et pointeur, c'est pas du tout la même chose.

    Par contre, il n'y a pas besoin de malloc pour aussi peu de caractères. Un tableau est suffisant.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut Re
    Merci pour cette réponse.
    En fait quand on crée un tableau t[n] de n'importe quel type, il l'alloue dans une partie de la mémoire accéssible en écriture/lecture, il fait automatiquement le malloc en quelque sorte?

  8. #8
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    En quelque sorte. Et surtout, il fait automatiquement le free aussi.

    En réalité, t[n] crée le tableau dans une zone de la mémoire destinée à stocker des objets temporaires (variables locales des fonctions, arguments des fonctions, etc.), couramment appelée "pile" (stack en anglais) tandis que malloc crée le tableau dans une zone de la mémoire réservée aux objets permanents (variables globales, etc.), courrament appelée le "tas" (heap en anglais). La capacité de la pile est généralement faible tandis que celle du tas est généralement énorme, mais la pile est plus facile à manipuler que le tas.

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

Discussions similaires

  1. [CR8.5] Probleme de tableau
    Par Sto59 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/02/2007, 15h07
  2. Réponses: 3
    Dernier message: 14/11/2006, 10h45
  3. probleme de tableau dynamique
    Par El Krotal dans le forum C
    Réponses: 9
    Dernier message: 25/06/2004, 17h00
  4. Probleme de chaine de caractéres et Insert
    Par Revan012 dans le forum ASP
    Réponses: 5
    Dernier message: 21/06/2004, 10h28
  5. [C#] Probleme de tableau
    Par djsbens dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/06/2004, 14h04

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