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 :

Structures et Tableaux


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Structures et Tableaux
    Bonjour à tous, j'apprends actuellement le C en cours, et j'ai quelques soucis avec les structures et les tableaux.
    Ce que je veut faire : créer une structure avec deux char et un int, et faire un tableau à partir de cette strucutre.
    Ce que je code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    typedef char CH30[31];
    struct PERSONNE
    {
    	CH30 nom;
    	CH30 adresse;
    	int num;
    };
     
     
    void main() 
    {
    ...
    PERSONNE Tp[100];
    ...
    }
    Et j'ai une erreur Tp undeclared...
    Des idées/indices ?
    Merci

    Edit: Je précise que je compile sur Xcode (Mac OS 10.6) et que mon projet et un projet "ligne de commande C".

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Salut,

    Sachant que tu n'as pas utilisé de typedef pour ta structure, il faut que tu précède l'appel de ta structure par struct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct PERSONNE Tp[100];
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Ah ! L'erreur est partie, mais une de perdue, 10 de retrouvées
    Du coup mon tableau est là, mais toutes les lignes de codes le concernant sont erronées :/ (Je ne suis absolument pas sûr de mon code, et je travail "à la découverte de l'erreur" ...)
    Par exemple je veut initialiser la colonne "num" de mon tableau, j'ai codé sa:

    for(i=0; i<100; i++)
    Tp.num[i]=0;

    Avec erreur "request for member 'num' in something not a structure or union"
    Toutes les autres erreurs sont de la même nature.
    (encore une fois je précise que se que je fais et probablement faux, je travail en prévision de mon cours donc sur certains points c'est la découverte )
    Merci.

  4. #4
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Tu as déclaré Tp comme un tableau donc il faut y accéder comme un tableau !
    Ensuite num n'est pas un tableau et donc il faut l'appeler en tant qu'entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=0; i<100; i++)
    	Tp[i].num = 0;
    Plus tu pédales moins fort, moins t'avances plus vite.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Oh mais oui je suis trop stupide... (surtout que j'ai pas d'excuse je l'avais déjà fait avant )
    Merci beaucoup !!!

    Une petite dernière pour la route, j'essaie de copier une ligne dans une autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(j=NBN; j>i; j=j-1); 
    		{
    			strcpy(Tp[j+1], Tp[j]);
    		}
    Avec erreur : incompatible type for argument 2 of '__builtin___strcpy_chk'
    (six comme ça, pour la même ligne (celle du strcpy) )

    Merci.

  6. #6
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Il faut peut-être que tu indiques clairement à strcpy ce que tu veux qu'elle copie
    En l'occurrence il faut que tu lui donnes Tp[j].nom ou Tp[j].adresse
    Plus tu pédales moins fort, moins t'avances plus vite.

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Ok ! Je pensais qu'en ne lui précisant pas, il copierait toutes les colonnes. C'est pas bien grave, je vais continuer comme sa.
    Merci beaucoup pour les réponses rapides et efficaces !

  8. #8
    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
    Je pensais qu'en ne lui précisant pas, il copierait toutes les colonnes.
    Non, strcpy ne copie que les chaînes de caractères (le '\0' final de la chaîne est lui-même copié).
    Par contre, pour des raisons de sécurité, il est préférable d'utiliser strncpy au lieu de strcpy, car, avec strcpy, si la taille allouée pour la chaîne destination n'est pas suffisamment grande il y a un risque de débordement de tampon avec une possibilité d'exécution de code arbitraire (faille très dangereuse) si la partie de la chaîne qui déborde se retrouve dans la zone de code ou dans la pile. Or, avec strncpy, on est obligé d'indiquer la taille limite de copie des caractères ; cela bouche donc la faille de sécurité (à condition d'indiquer la bonne valeur, forcément).

Discussions similaires

  1. probleme pour structure et tableaux
    Par yassin123441 dans le forum C++
    Réponses: 1
    Dernier message: 18/06/2008, 01h11
  2. Type Structuré et Tableaux
    Par Aurazed dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/05/2007, 22h45
  3. [C++/CLI]Structures et tableaux en C++ .NET
    Par kinouseb dans le forum C++/CLI
    Réponses: 2
    Dernier message: 08/12/2006, 14h01
  4. [XSD]Créer structure de tableaux
    Par blastobi dans le forum Valider
    Réponses: 4
    Dernier message: 07/04/2006, 11h29
  5. Structures et tableaux, la galère
    Par kameha dans le forum C
    Réponses: 10
    Dernier message: 05/01/2006, 17h31

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