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 :

affichage données d'un tableau statique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut affichage données d'un tableau statique
    bonsoir à tous,

    dans un but pédagogique je me suis fait un petit programme m'affichant les données d'un tableau statique

    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main(int argc, char **argv)
    {
    	char *t[] = {"lol1","lol2","lol3"};
    	int i = 0;
     
    	printf("taille du tableau: %d\n", sizeof *(t));
    	for (; i < sizeof *(t); i++)
    		printf("t[%d] = %s\n", i, t[i]);
     
    	return EXIT_SUCCESS;
    }
    résultat:

    taille du tableau: 4
    t[0] = lol1
    t[1] = lol2
    t[2] = lol3
    t[3] =
    le problème ici c'est que le retour de sizeof sur le tableau est de 4 éléments, lorsque je parcours ce dernier le résultat se trouve du coup érroné.

    Ou es-ce que je m'y suis mal prit ?

    merci à vous et bonne soirée

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    La fonction sizeof, contrairement à ce que peut laisser entendre son nom, ne renvoie pas la taille du tableau mais la taille du pointeur que tu lui passes en argument... ou tout autre objet, donc taille de la variable et non pas le nombre d'élément d'un tableau ou d'une chaîne !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    d'accord c'est noté, il me semblait bien que ca venait de la. Donc seul méthode calculer la taille soit même !

  4. #4
    Expert confirmé
    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
    Par défaut
    Dans ton programme t est un tableau de N char *. Par conséquent on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof t == N* sizeof(char*) == N* sizeof *t
    On en déduit le nombre d'éléments du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N == sizeof t/sizeof *t
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	printf("taille du tableau: %d\n", sizeof t/sizeof *t);
    	for (; i < sizeof t/sizeof *t ; i++)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    merci pour ces infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(int argc, char **argv)
    {
    	char *t[] = {"lol1","lol2","lol3"};
    	int i = 0;
     
    	printf("sizeof (t) = %d\n", sizeof(t));
    	printf("sizeof *(t) = %d\n", sizeof *(t));
    	printf("taille du tableau: %d\n", sizeof (t) / sizeof *(t));
    	for (; i < sizeof (t) / sizeof *(t); i++)
    		printf("t[%d] = %s\n", i, t[i]);
     
    	return EXIT_SUCCESS;
    }

    sizeof (t) = 12
    sizeof *(t) = 4
    taille du tableau: 3
    t[0] = lol1
    t[1] = lol2
    t[2] = lol3
    tout est OK

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

Discussions similaires

  1. Affichage données d'un tableau
    Par NicoO_O dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2010, 01h57
  2. Probleme affichage données dans un tableau
    Par spider_sup dans le forum NetBeans
    Réponses: 0
    Dernier message: 15/08/2008, 11h10
  3. Réponses: 8
    Dernier message: 03/04/2006, 19h28
  4. [SQL-Server] Pb affichage données dans tableau
    Par steve o'steen dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 14/03/2006, 09h29
  5. Réponses: 3
    Dernier message: 11/01/2006, 17h44

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