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 :

déclaration dynamique d'un tableau de chaine de caractères


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 24
    Points
    24
    Par défaut déclaration dynamique d'un tableau de chaine de caractères
    salut,
    bon, j'ai voulu faire une déclaration dynamique d'un tableau de chaine de caractère donc j'ai fait ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     	int n,i;
     	scanf("%d",n);
            char **T;
     	T=(char**)malloc(n*sizeof(char*));
     	for(i=0;i<n;i++)
     	{
    		*(T+i)=(char*)malloc(20*sizeof(char));
    		}
    la compilation se passe bien mais lors de l'execution le programme se bloque
    je cherche donc ou est l'erreur

  2. #2
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    T est un tableau de pointeurs de pointeur, qui est alloué dynamiquement.
    T+i correspond à l'adresse où est stocké le nième (en partant de 0) pointeur du tableau, ce pointeur pointant vers la énième chaîne de caractères.
    *(T+i) correspond donc à la valeur du énième pointeur du tableau et donc à l'adresse de la énième chaine de caractères.

    *(T+i) correspond à la même chose que T[ i ].

    Le problème se situe en fait au niveau du scanf. La fonction attend en paramètre un pointeur sur int (et donc une adresse). Or tu lui envoies un int.
    Il ne faut pas oublier non plus de vérifier le retour de chaque malloc, de gérer proprement les éventuelles erreurs (malloc qui retournerait NULL), de libérer la mémoire allouée une fois qu'on n'en a plus besoin (free).

    Les casts au retour de malloc sont inutiles. La conversion void* vers un pointeur de type quelconque (et vice versa) est implicite en C.

  3. #3
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    N'empêche que T[i] est plus facile et moins ambigu à lire que *(T+i) (je trouve)
    La valeur n'attend pas le nombre des années

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    merci beauoups j'arrive pas à croire que c'est ça qui m'a embêté :S

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

Discussions similaires

  1. Déclaration statique d'un tableau de chaines
    Par ymoreau dans le forum Débuter
    Réponses: 2
    Dernier message: 07/08/2009, 13h29
  2. Déclaration dynamique d'un tableau dans une procédure
    Par lowwa132 dans le forum Débuter
    Réponses: 12
    Dernier message: 25/01/2009, 21h51
  3. Réponses: 6
    Dernier message: 27/04/2008, 10h53
  4. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  5. [C] tableau de chaines de caractères
    Par kitsune dans le forum C
    Réponses: 18
    Dernier message: 01/04/2006, 18h18

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