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 statique d'un tableau de chaines


Sujet :

C

  1. #1
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut Déclaration statique d'un tableau de chaines
    Bonjour,
    Désolé je sais que c'est un sujet assez récurrent mais malgré mes recherches impossible de trouver de réponse un peu générale. La plupart des posts ne parlent que de cas très précis qui ne correspondent pas tout à fait à mon problème.

    J'ai besoin d'utiliser un tableau de chaînes de caractères, pour simplifier j'en ai fixé la taille (et du tableau, et des chaînes). Je pensais pouvoir faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define MAX_ITEMS_BY_LINE 64
    #define WORD_SIZE 32
    char labels[MAX_ITEMS_BY_LINE][WORD_SIZE];
    Seulement lorsque je veux passer ce tableau en paramètre d'une fonction (logiquement un char**) j'ai un warning à la compilation :
    warning: passing arg 2 of `explodeStringsLine' from incompatible pointer type

    Ma fonction prend en paramètre formel un char**, et lors de l'appel je mets directement la variable labels en paramètre effectif.

    Donc question, est-ce que ma façon d'allouer le tableau est correcte ? Pourquoi ne serait-ce pas un char** ?

    Merci d'avance de m'éclairer :)

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il n'y a pas de rapport entre le nombre de dimensions et le nombre d"étoiles" et ce n'est pas un char**.
    Un char** est un type "adresse d'un pointeur".

    L'identificateur d'un tableau, sauf utilisé avec les opérateurs unaires sizeof et & (adresse de), est du type "adresse du premier élément du tableau"
    Donc, pour un tableau char tab[N], ce type est "adresse d'un char", soit char* et la déclaration dans la liste de paramètres d'une fonction sera char * t ou ce qui est également admis char t[].
    char ** peut donc aussi être l'adresse d'un tableau de char*.

    Pour un tableau char tab[N][M] , l'élément du tableau est du type char[M]. Alors tab sera du type "Adresse d'un tableau de M char" soit char (*) [M] (avec les parenthèses) et la déclaration dans la liste de paramètres d'une fonction sera char (*t) [M] ou ce qui est également admis char t[][M]. La présence d'une valeur M est obligatoire.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Citation Envoyé par diogene Voir le message
    char ** peut donc aussi être l'adresse d'un tableau de char*.
    C'est dans ce sens là que je pensais l'utiliser, mais si j'ai bien compris ça ne s'applique qu'à une allocation dynamique des chaînes, je l'ignorais merci !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2010, 21h40
  2. Réponses: 3
    Dernier message: 08/03/2010, 21h12
  3. Réponses: 6
    Dernier message: 27/04/2008, 10h53
  4. Réponses: 11
    Dernier message: 31/12/2005, 13h00
  5. Réponses: 11
    Dernier message: 29/04/2005, 19h45

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