Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2854 connectés 

  FORUM HardWare.fr
  Programmation
  C

  PROBLEME AVEC STRUCTURE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PROBLEME AVEC STRUCTURE

n°1681116
clintou
Posté le 03-02-2008 à 18:28:38  profilanswer
 

salut ,
 
 
Voila j'ai une probleme avec une strucure.
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. struct Personne
  4. {
  5.        char Nom[50];
  6.        char Prenom [50];
  7.        int Age;
  8.        }LaPersonne;
  9. main ()     
  10.      
  11. {
  12. LaPersonne.Age=19;
  13. {
  14. printf("%e",LaPersonne.Age);
  15. }
  16. getch();
  17. }


 
Apres avoir compilé et executer il m'affiche une variable incomprehensible du style:4.406791e-309 alors qu'il aurait du m'afficher 19,non?
 
 
merci d'avance à tous ceux qui m'aideront!!

mood
Publicité
Posté le 03-02-2008 à 18:28:38  profilanswer
 

n°1681118
Profil sup​primé
Posté le 03-02-2008 à 18:36:24  answer
 

Les capitales dans le titre du topic.
 
%e, c'est même pas dans ma doc. Essaie %d
 
Maintenant ça y est ... printf


Message édité par Profil supprimé le 03-02-2008 à 18:42:04
n°1681119
clintou
Posté le 03-02-2008 à 18:44:53  profilanswer
 

merci l'ami, effectivement avec"%d" ça fonctionne!!

n°1681121
Profil sup​primé
Posté le 03-02-2008 à 18:48:00  answer
 

clintou a écrit :

merci l'ami, effectivement avec"%d" ça fonctionne!!


 
De rien, les capitales  [:baobab]


Message édité par Profil supprimé le 03-02-2008 à 18:48:45
n°1681124
clintou
Posté le 03-02-2008 à 18:53:10  profilanswer
 

encore moi j'ai un autre probleme.
 
en initialisant le champ prenom avec une chaine de caractère le compilateur bug.
 
LaPersonne.Prenom=bouba;

n°1681125
Joel F
Real men use unique_ptr
Posté le 03-02-2008 à 18:54:02  profilanswer
 

une chaine de caractére :
1/ ca se met entre guillement
2/ on alloue la mémoire necessaire
3/ on utilse strncpy

 

Et %e ca existe, c'ets pour afficher des nombres réels en notations scientifiques.


Message édité par Joel F le 03-02-2008 à 18:54:33
n°1681127
Profil sup​primé
Posté le 03-02-2008 à 18:57:06  answer
 

clintou a écrit :

encore moi j'ai un autre probleme.
 
en initialisant le champ prenom avec une chaine de caractère le compilateur bug.
 
LaPersonne.Prenom=bouba;


 
J'en sais rien, avec Ada, il faut donner une chapine de longueur égale à celle de la variable affecté.
 
Donc peut-être, soit en complétant la chaine avec 50-5=45 caractère ' ' (espace) ou en restreignant l'espace d'affectation à 5 caractères, ça passera  :??:

n°1681128
clintou
Posté le 03-02-2008 à 18:59:36  profilanswer
 

desole je n'ai pas compris.
 
1/ ca se met entre guillement
2/ on alloue la mémoire necessaire
3/ on utilse strncpy

n°1681131
Profil sup​primé
Posté le 03-02-2008 à 19:11:35  answer
 

Entre guillemet ... comme ça... "bouddha"
alouer la mémoire, ça doit être un truc comme la fonction 'malloc', mais là, c'est un truc de pro pour moi, et moi je sèche pour le moment.
 
Et strncpy, ça doit être une fonction qui permet de copier une chaîne de caractères. En cherchant un peut sur google, tu devrais trouver ton bonheur.
 
je vais faire ce que tu fais, avec les info de Joel F pour voir.

n°1681134
Joel F
Real men use unique_ptr
Posté le 03-02-2008 à 19:29:37  profilanswer
 


 
 :heink: c'ets la base du C la gestion de la mémoire

mood
Publicité
Posté le 03-02-2008 à 19:29:37  profilanswer
 

n°1681136
clintou
Posté le 03-02-2008 à 19:34:42  profilanswer
 

"c'ets la base du C la gestion de la mémoire"
 
parle plus clairement l'etranger,exprime toi!!

n°1681137
Profil sup​primé
Posté le 03-02-2008 à 19:36:49  answer
 

Joel F a écrit :


 
 :heink: c'ets la base du C la gestion de la mémoire


 
T'es sûr que c'est pas son problème.
 
Je plaisante, souplesse tout ça...


Message édité par Profil supprimé le 03-02-2008 à 19:37:01
n°1681139
clintou
Posté le 03-02-2008 à 19:54:03  profilanswer
 

en fait j'ai defini une structure et j'ai declaré une variable de type structure.Je souhaite affecter une valeur au champ prenom de ma structure ma je n'ai sais pas comment faire.

n°1681141
Profil sup​primé
Posté le 03-02-2008 à 19:59:50  answer
 

Voila ce que j'ai fais. (désolé pour l'orthographe, je ne suis pas très fort en rien façon, bref)
 

Code :
  1. #include <stdlib.h> /* pour le retour de main */
  2. #include <string.h> /* pour strncpy */
  3. #include <stdio.h> / pour printf je suppose */
  4. struct Personne
  5. {
  6.  
  7.  char Nom[50];
  8.  char Prenom [50];
  9.  int Age;
  10.  
  11. } LaPersonne;
  12.  
  13. int main (void)    
  14.    
  15. {
  16.  char pause;
  17.  char * nom = "bouddha";
  18.  LaPersonne.Age=19;
  19.  strncpy(LaPersonne.Prenom, nom, strlen(nom));
  20.  
  21.  printf("%d",LaPersonne.Age);
  22.       
  23.  pause=getchar();
  24.  return 0;
  25. }


 
J'ai remplacé getch par getchar parce que j'ai trouvé des truc qui m'ont influencé dans ce sens.
Normalement strncpy prend des pointeur sur caractère et non des tableau de char.
Et comme je l'ai dis, je ne connais pas malloc. :/

Message cité 1 fois
Message édité par Profil supprimé le 03-02-2008 à 20:02:00
n°1681144
Profil sup​primé
Posté le 03-02-2008 à 20:05:56  answer
 

Euh, merci Joel F
[:dawa]

n°1681145
clintou
Posté le 03-02-2008 à 20:11:16  profilanswer
 

desole mais je n'ai pas compris cette instruction.
 
 
strncpy(LaPersonne.Prenom, nom, strlen(nom));

n°1681149
Profil sup​primé
Posté le 03-02-2008 à 20:19:12  answer
 

clintou a écrit :

desole mais je n'ai pas compris cette instruction.
 
 
strncpy(LaPersonne.Prenom, nom, strlen(nom));


 
De la doc ici strcpy et strncpy sur developpez.com.
et puis il y à google, un moteur de recherche [:powa]

n°1681150
Elmoricq
Modérateur
Posté le 03-02-2008 à 20:20:22  profilanswer
 

clintou, merci d'éditer le titre du topic pour en enlever les majuscules

n°1681159
Profil sup​primé
Posté le 03-02-2008 à 21:02:29  answer
 

En haut de chaque message, tu as 5 ou 5 icônes. L'une d'entre elles te permet d'éditer le message, y compris le premier qui contien le titre qui dans ce topic est en CAPITALES.

n°1681487
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-02-2008 à 16:07:25  profilanswer
 


Une façon compliquée d'écrire :

Code :
  1. strcpy (LaPersonne.Prenom, nom);



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1681493
Profil sup​primé
Posté le 04-02-2008 à 16:13:46  answer
 

Emmanuel Delahaye a écrit :


Une façon compliquée d'écrire :

Code :
  1. strcpy (LaPersonne.Prenom, nom);




 
Alors là, Joel F à préconisé strncpy, moi je met strncp. Et j'ai lu de que strcpy était vulnérable.
 
Voila voila  :??:

n°1681520
Elmoricq
Modérateur
Posté le 04-02-2008 à 16:43:56  profilanswer
 

Pas plus vulnérable qu'en indiquant à strncpy() la taille du buffer de lecture, alors que c'est celui dans lequel on écrit qui devrait servir de référence, pour ne pas faire de dépassement de capacité : si "nom" est plus grand que "LaPersonne.Prenom", ça dépasse, et çaÿ mal ©
Du coup, l'utilisation que tu en fais est strictement identique à strcpy() tout court.

 

Mais ce n'est pas tout : strncpy avec la bonne taille de buffer est très casse-gueule aussi, cf. la manpage à ce sujet (vraiment une implémentation de daube sur ce coup-là, d'ailleurs).
Perso je préfère utiliser snprintf().


Message édité par Elmoricq le 04-02-2008 à 17:13:31
n°1681558
Profil sup​primé
Posté le 04-02-2008 à 17:26:40  answer
 

Reçu, merci Elmoricq

n°1681587
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-02-2008 à 17:57:52  profilanswer
 

Bah oui, mais comme toujours, il faut réfléchir avant d'agir. Vulnérable, certes, mais comment, pourquoi ? Et ta 'correction', tu penses qu'elle est moins vulnérable ? Comment ? Pourquoi ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1681608
Profil sup​primé
Posté le 04-02-2008 à 18:30:05  answer
 

Emmanuel Delahaye a écrit :

Bah oui, mais comme toujours, il faut réfléchir avant d'agir. Vulnérable, certes, mais comment, pourquoi ? Et ta 'correction', tu penses qu'elle est moins vulnérable ? Comment ? Pourquoi ?
 


 
Perso, je pense avec Ada, qu'est loin d'être du C et je n'y connais pas grand chose, et encore moins au C.
La vulnérabilité, je l'ai pioché sur google, je n'y ai pensé qu'une seconde en me disant que des individus plus compétents que moi c'étaient penché sur la question, et j'ai exploité l'info qui corroborait l'orientation de Joel F.
 
 
 
 
 

n°1681611
Joel F
Real men use unique_ptr
Posté le 04-02-2008 à 18:38:04  profilanswer
 

ouais non mais bon ^^ ici strncpy c'etait surtout pr copier genre t'es 49+1 caractéres vu que tu utilise un tableau statique au lieu de faire de smalloc/free et d'encapsuler ça proprement :[

n°1681636
Elmoricq
Modérateur
Posté le 04-02-2008 à 20:18:17  profilanswer
 

Joel F a écrit :

ouais non mais bon ^^ ici strncpy c'etait surtout pr copier genre t'es 49+1 caractéres vu que tu utilise un tableau statique au lieu de faire de smalloc/free et d'encapsuler ça proprement :[


snprintf() [:arcueid brunestud]
 
Parce qu'avec strncpy(), on est obligé de gérer le \0 terminal si la source est plus grande que la destination. :/

n°1681652
Joel F
Real men use unique_ptr
Posté le 04-02-2008 à 20:42:34  profilanswer
 

:jap: je l'oublie tout le temps celui là [:dawa]

n°1682143
Profil sup​primé
Posté le 05-02-2008 à 17:49:06  answer
 

Yep,
 
Serait-il possible d'avoir les implémentations respectives des intervenants si leur disponibilité leur permet, au moins une, pour faire ce qui est à faire ici.
C'est pas pour pomper et avoir une bonne note, c'est pour voir si c'est possible de faire les choses correctement en fait.
 
On souhaite simplement affecter une chaîne de caractères constante à une variable de type tableau de caractères.

Message cité 1 fois
Message édité par Profil supprimé le 05-02-2008 à 17:52:00
n°1682151
Elmoricq
Modérateur
Posté le 05-02-2008 à 17:51:26  profilanswer
 

Pour ma part, j'utilise ceci :
snprintf(dest, taille_de_dest, "%s", source);

n°1682176
Profil sup​primé
Posté le 05-02-2008 à 18:04:57  answer
 

Yep,
 
Elmoricq, une petite question, (j'écris habituellement avec Ada)
 
Je peux alors confondre tableau de caractères et pointeur sur char ?


Message édité par Profil supprimé le 05-02-2008 à 18:06:54
n°1682202
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-02-2008 à 18:43:28  profilanswer
 


Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main (void)
  4. {
  5.    char dest[8];
  6.    *dest = 0;
  7.    strncat (dest, "Hello world", sizeof dest - 1);
  8.    printf ("dest = '%s' (%u car)\n", dest, (unsigned) strlen (dest));
  9.    return 0;
  10. }



dest = 'Hello w' (7 car)
 
Press ENTER to continue.


Message édité par Emmanuel Delahaye le 05-02-2008 à 18:45:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1682217
Profil sup​primé
Posté le 05-02-2008 à 19:02:02  answer
 

Merci Emmanuel Delahaye,
 
Cependant, j'ai la même question à poser...
 
Peut-on, dans un sens, assimiler un tableau de char à un pointeur sur char ?
 
La réponse m'intéresse grandement.

n°1682223
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-02-2008 à 19:07:21  profilanswer
 


  • Un pointeur et un tableau sont des objets différents.
  • Quand on passe un tableau 'tab' de taille N à une fonction, celui-ci est convertit en l'adresse du nième élément de ce tableau, soit tab + n avec n valant de 0 à N-1.


Définit "assimiler".

 


Message cité 1 fois
Message édité par Emmanuel Delahaye le 05-02-2008 à 19:11:47

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1682224
Profil sup​primé
Posté le 05-02-2008 à 19:12:47  answer
 

Emmanuel Delahaye a écrit :


Définit "assimiler".
 
 


 
Présenter comme semblable.

n°1682235
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-02-2008 à 19:18:34  profilanswer
 


C'est tordu. Si tu veux dire 'pareil', ben non, c'est pas pareil.

 

Un pointeur est une variable simple modifiable. Un tableau est une variable composée non modifiable dont les éléments sont modifiables. Bref, rien à voir. C'est le fait que *(p + i) soit équivalent à p[i] qui te trouble ? Simple 'sucre syntaxique' selon l'expression consacrée.

 

http://mapage.noos.fr/emdel/notes.htm#pointeurs
http://mapage.noos.fr/emdel/notes.htm#tableau

 


Message édité par Emmanuel Delahaye le 05-02-2008 à 19:19:30

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1682250
Profil sup​primé
Posté le 05-02-2008 à 19:31:48  answer
 

Merci,
 
Si je comprends bien, lorsque l'on passe un tableau la ou est attendu un pointeur, à la génération d'une cible, la chaîne de production (pardon pour le flou) opère un décalage de Tab[n] à Tab[0]  ? j'ai bon ?
 
edit : ou plutôt de tab[n] à tab, excusé

Message cité 1 fois
Message édité par Profil supprimé le 05-02-2008 à 20:27:20
n°1683562
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-02-2008 à 19:04:27  profilanswer
 


Ce qui donne :

 
Citation :

Si je comprends bien, lorsque l'on passe un tableau la ou est attendu un pointeur, le compilateur convertit automatiquement tab en l'adresse du premier élément, c'est à dire &tab[0], qui s'écrit aussi tab + 0, soit, en définitive, tab


C'est pour ça qu'on met 'tab' et non '&tab'.


Message édité par Emmanuel Delahaye le 07-02-2008 à 19:04:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1683624
Profil sup​primé
Posté le 07-02-2008 à 20:38:32  answer
 

Merci  :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  PROBLEME AVEC STRUCTURE

 

Sujets relatifs
[GTK] Probleme passage structure en argument signalprobleme de structure
Opérations matrices problème structure pointeur[xml-xsl] Probleme de structure de fichier xsl
probleme structure chaine de caracteresAmélioration de la structure des tables - problème d'évolution
Probléme avec une structureproblème de copie de structure
Probleme de free sur une structureProbleme de taille de structure avec char[] et double
Plus de sujets relatifs à : PROBLEME AVEC STRUCTURE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR