begin process at 2012 05 30 12:12:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

structure en c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

structure en c

mercredi 1 juin 2011 à 22:33:26 | structure en c

vercd7am

Bonjour,

j'aurais voulu m'enleve un doute sur les structures en c.

Disons que je definis une structure
Code C/C++ :
struct bidule
{
int bibi;
char bobo [200];
};


puis un pointeur sur ma structure

Code C/C++ :
bidule *chose


lorsque je fais appel a chose.bibi, c'est bien un pointeur sur int, non, jusque la pas d'erreur ?
Mais si je veux imprimer la valeur du int qui est a l'adresse pointe par mon chose.bibi, qu'est ce que je dois rentre ? La question peut paraitre conne, mais j'ai ecrit un prog et quand je lui demande de me renvoyer la valeur, j'ai l'impression qu'il me renvoie une adresse (et c'est pas qu'une impression. Je tiens a preciser que je ne mets pas &chose.bibi). C'est pour ca que j'en suis venu a me demander quel est le type de chose.bibi par exemple.

merci d'avance
jeudi 2 juin 2011 à 00:50:21 | Re : structure en c

CptPingu

Administrateur CodeS-SourceS
Soit la structure "bidule", alors pour accéder à la valeur contenu dans "bibi":
Code C/C++ :
bidule chose1;
=> chose1.bibi;

bidule* chose2;
=> (*chose2).bibi ou chose2->bibi


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 2 juin 2011 à 00:51:34 | Re : structure en c

CptPingu

Administrateur CodeS-SourceS
Bien évidemment, on considère que chose2 est alloué: bidule* chose2 = malloc(1 * sizeof (bidule))

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 2 juin 2011 à 08:14:04 | Re : structure en c

vercd7am

Merci beaucoup pour la reponse, je vais la tester des que possible. J'avais essaye (*chose.bibi) ou encore (*(chose.bibi)) mais ca n'allait pas.

Par ailleurs, j'aurais voulu savoir si on peut connaitre le nombre de lignes dans un fichier sans le parcourir au prealable deja une fois.

J'aimerais allouer de la place (x fois ma structure) mais x variant, pour l'instant, il m'a semble qu'un malloc suffisament grand avec eventuellement realloc au besoin etait le mieux. Mais si je peux allouer d'entree le bon espace memoire et m'eviter un eventuel realloc, ce serait mieux.
jeudi 2 juin 2011 à 10:27:50 | Re : structure en c

vercd7am

Malheureusement, j'en suis au meme niveau, ca n'a pas marche.

Voici ce que je fais :

deja une structure

Code C/C++ :
struct titre
{
    int nombre;
    char naz[200];
    char nav[200];
 };


puis dans mon main

Code C/C++ :
struct titre *li;

    li = (struct titre *)malloc(1*sizeof(*li));

    lectureInt(fichier, li[0].nombre);
    lecture(fichier, li[0].naz);
    printf("blblb : %d \n %s \n", li[0].nombre, li[0].naz);


ou le lectureInt ressemble a ca

Code C/C++ :
#include <stdio.h>
#include "conversionAsciiNombre.h"

void lectureInt(FILE *fichier, int *nom)
{
    int l;

    *nom=0;
    printf("%d\n",(*nom));
    while( (l=fgetc(fichier)) != 9 )
    {
        *nom=((*nom)*10)+conversionAsciiNombre(l);
        printf("%d \t", (*nom));
    }

}


et le lecture a ca

Code C/C++ :
#include <stdio.h>


void lecture(FILE *fichier, char *nom)
{
    int l;
    int j=0;

    while( (l=fgetc(fichier)) != 10 )
    {
       *(nom+j)=l;
       j++;
    }
    *(nom+j)=0;

}


Le fichier contient un nombre, un tab puis plusieurs noms a la suite separes par des espaces.
Je recupere bien ce que je veux dans mon lecture et a priori aussi dans lectureInt (j'ai mis un print dans cette fonction pour controler et ca renvoie bien ce que je veux).

Je dois a priori me tromper au niveau du type des elements de ma structure, mais je n'arrive pas a trouver ce qui ne va pas et pourquoi il renvoie ce que je veux avec les char et pas avec mon int (je recupere ce que je veux mais je n'affiche pas ce que je veux, et ca m'embete).

jeudi 2 juin 2011 à 15:31:44 | Re : structure en c

coucou747

Administrateur CodeS-SourceS
Réponse acceptée !
Bonjour,
quand tu écris :
lectureInt(fichier, li[0].nombre);

et bien li[0].nombre est un int, pas un int*

tu dois faire :

lectureInt(fichier, & ( li[0].nombre) );
vendredi 3 juin 2011 à 16:22:20 | Re : structure en c

vercd7am

Merci pour cette reponse, effectivement ca marche.

Mais je dois dire que la j'ai du mal a comprendre et d'ailleurs a la compilation, il me renvoie un warning (maintenant j'ai un warning et il renvoie ce que je veux, avant pas de warning mais pas ce que je veux).

Dans ma fonction je demande un pointeur sur un File et un pointeur sur un int. Or avec cette reponse, je lui renvoie l'adresse de mon int.

Ma fonction lecture fonctionne correctement et je n'ai pas de warning. En revanche, si je remplace par &(li[0].naz), ca marche encore mais avec un gros warning. Pourquoi ????????????

Code C/C++ :
#include <stdio.h>


void lecture(FILE *fichier, char *nom)
{
    int l;
    int j=0;

    while( (l=fgetc(fichier)) != 10 )
    {
       *(nom+j)=l;
       j++;
    }
    *(nom+j)=0;

}
vendredi 3 juin 2011 à 16:29:15 | Re : structure en c

coucou747

Administrateur CodeS-SourceS
c'est quoi le warning ?
vendredi 3 juin 2011 à 16:29:57 | Re : structure en c

CptPingu

Administrateur CodeS-SourceS
int nombre; => entier
char naz[200]; => pointeur (équivaut à char* naz en terme de type)

nombre => int
&nombre => int*
&&nombre => int**

naz => char*
&naz => char**
&&naz => char***

li[0].nombre => int
&li[0].nombre => int*
&&li[0].nombre => int**

li[0].naz => char*
&li[0].naz => char**
&&li[0].naz => char***

Donc:
lectureInt(fichier, &li[0].nombre);
lecture(fichier, li[0].naz);

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
vendredi 3 juin 2011 à 17:18:03 | Re : structure en c

vercd7am

Le warning c'est ca :

passing argument 2 of 'lectureInt' makes integer from pointer without a cast

dans mon lectureInt.h : expected 'int' but argument is of type 'int *'

Maintenant, je remercie capitaine pingu pour le resume au passage, de ce que je sais, l'operateur & applique a une variable delivre l'adresse de celle-ci.

Est-ce que lorsque l'on fait &variable, pour la machine ca revient a lui declarer implicitement un pointeur vers 'type de ma variable' qui repere cette variable, du genre :
Code C/C++ :
type i;
type *p;
p = &i;


En gros ce que je comprends par "donne moi l'adresse de i", c'est plutot "donne moi la valeur de mon pointeur p qui pointe sur ma variable i".

1 2

Cette discussion est classée dans : code, int, chose, structure, bibi


Répondre à ce message

Sujets en rapport avec ce message

Aide pour mega debutant [ par C++ ] Salut, bon alors je vien d ouvrir c++ mais comment mettre un code sur un boutton ???par exemple ce code comment je doits le mettre sur un bouton :int tableau dynamique de structure en C ? [ par axl79 ] salutje voudrai faire un tableau dynamique de structures. voici ma structure: struct struct_arete { int sommet1; int sommet2; int quantite;} arete;com Difference [ par xionoxid ] C'est koi la difference entre time (0) et time (NULL) les 2 font des nbr aleatoire !??#include #include #i Probleme avec le "linker" [ par Darkneon ] Salut,J'ai 3 fichiers comme ceciTest.cpp#include "test.h"#include void PrintA(int num){ for(int i=0; i<num; i++ passer d'un widget a une autre structure [ par khaledtaib ] bonjourj' ai un petit programme de traitement d'image en language C, que je veux lui creer une interface graphique en GTK+.ce programme doit afficher Tableau de structure [ par tomsawyerbelgique ] Bonjour suriez-vous me dire comment fait-on pour passer un tableau de structure dans une fonction:struct student { char nom[10]; int nbcot besoin d'aide [ par ekinoks ] voila g trouver un code c++ pour decrypté un fichier mais je m'y conné pas dutout en c++ kunkun pouré m'aidéle code est :void p(FILE* fp, int seed) { Cacher le curseur [ par BsEtZeOpLhD ] Salut.J'essay de cacher le curseur sous win Xp.J'ai fait le code suivant :#include int WINAPI WinMain(HINSTANCE hinstExe, HINSTANC exception et AfsMessageBox [ par poseidon2 ] Voic mon code: void *ImageLink::imageRecvThread(void *pParam){ ImageLink *iLink = (ImageLink*)pParam; int nIndex = 0; int nSizeRecv = 0; unsigned in Pointeur [ par casafa ] Bonjour tlm,Je suis débutant et je comprend à quoi sert les pointeurs...Quel est la différence entre ces 2 exemples, qu'est ce que le premier à en plu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales