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 :

Allocation dynamique: Tableau de pointeur sur char


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut Allocation dynamique: Tableau de pointeur sur char
    Bonjour

    Je cherche à découper une chaine de caractère.
    Je veux donc construire un tableau de pointeur de char que j'iniialiserai plus tard

    Tout d'abord j'ai une fonction qui me compte le nombre de mots

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int nombreDeMots;
    compteurNombreMots(ligne,&nombreDeMots);
    Je cherche à initialiser dynamiquement mon tableauDeMots

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char** tableauDeMots;
    tableauDeMots [malloc(nombreDeMots*sizeof(char*))]
    Mais j'ai une erreur: l'indice du tableau n'est pas un entier

    Je ne comprend pas pourquoi j'ai ce problème: il ne reconnaît pas la taille d'un char*??? Comment faire?

    J'aimerai aussi savoir si, quand j'aurais initialisé mon tableauDeMots si jefais tableauDeMots[0]="chaine" ma chaîne sera littérale.

    Je pense que oui mais n'en suis pas sur. Pourrais je alors définir mon tableau comme une zone en lecture seule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char const *tableauDeMots;
    Merci d'avance de vos réponses

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Anonymouse Voir le message
    Bonjour

    Je cherche à découper une chaine de caractère.
    Je veux donc construire un tableau de pointeur de char que j'iniialiserai plus tard

    Tout d'abord j'ai une fonction qui me compte le nombre de mots

    int nombreDeMots;
    compteurNombreMots(ligne,&nombreDeMots);

    Je cherche à initialiser dynamiquement mon tableauDeMots

    char** tableauDeMots;
    tableauDeMots [malloc(nombreDeMots*sizeof(char*))]

    Mais j'ai une erreur: l'indice du tableau n'est pas un entier

    Je ne comprend pas pourquoi j'ai se problème: il n'e reconnaît pas la taille d'un char*??? Comment faire?
    Faut bien écrire ton code !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableauDeMots=malloc(nombreDeMots*sizeof(char*))
    Accessoirement il est d'usage qu'une fonction qui a pour but de compter des trucs renvoie le nb de trucs trouvés (et non que tu lui passes le compteur en paramètre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nombreDeMots;
    nombreDeMots=compteurNombreMots(ligne);
    Citation Envoyé par Anonymouse Voir le message
    J'aimerai aussi savoir si, quand j'aurais initialisé mon tableauDeMots si jefais tableauDeMots[0]="chaine" ma chaîne sera littérale.
    On copie une chaîne via strcpy. Et il est nécessaire de t'assurer que la zone copiée soit de taille suffisante pour stocker la chaîne

    Citation Envoyé par Anonymouse Voir le message
    Pourrais je alors définir mon tableau comme une zone en lecture seule?
    Non puisque tu y copies des choses cela veut dire que tu y écrits donc que la zone est writeable. On peut pas rendre une zone readonly après coup...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Faut bien écrire ton code !!!

    Accessoirement il est d'usage qu'une fonction qui a pour but de compter des trucs renvoie le nb de trucs trouvés (et non que tu lui passes le compteur en paramètre)
    Ok merci je vais faire comme tu dis.

    On copie une chaîne via strcpy. Et il est nécessaire de t'assurer que la zone copiée soit de taille suffisante pour stocker la chaîne

    Non puisque tu y copies des choses cela veut dire que tu y écrits donc que la zone est writeable. On peut pas rendre une zone readonly après coup...
    Le problème c'est que je ne veux pas à avoir à compter le nombre de lettre de chaques mots.

    Je voulais créer un tableau de char** car je pensais que pour chaque case ou je ferai tableauDeMots[0]="chaine" ca serait comme si je faisais char* casUn="chaine";

    En fait je dois découper une chaine de caractères en mots.
    J'ai donc créé cette méthode qui marche.

    Cependant je ne sais pas si elle est propre (sans effets de bord) et portable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void decoupeChaine(char* ligne, char** tableauDeMots)
    	{
    		int compteur=0;
     
    		tableauDeMots[compteur]=strtok(ligne," ");
     
    		while(tableauDeMots[compteur]!=NULL)
    		{	
    			compteur++;
    			tableauDeMots[compteur] = strtok(NULL, " ");
    		}
    }

  4. #4
    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 Anonymouse Voir le message
    Le problème c'est que je ne veux pas à avoir à compter le nombre de lettre de chaques mots.

    Je voulais créer un tableau de char** car je pensais que pour chaque case ou je ferai tableauDeMots[0]="chaine" ca serait comme si je faisais char* casUn="chaine";
    Utilise strdup(), c'est pas standard C, mais c'est POSIX.1, donc très portable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableauDeMots[0] = strdup ("chaine");
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Utilise strdup(), c'est pas standard C, mais c'est POSIX.1, donc très portable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableauDeMots[0] = strdup ("chaine");
    Ok merci je vais regarder cela :p

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  2. Réponses: 6
    Dernier message: 02/11/2006, 16h44
  3. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03
  4. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  5. Sizeof d'un pointeur sur char ...
    Par Mike888 dans le forum C
    Réponses: 8
    Dernier message: 03/11/2005, 13h04

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