RESOLU warning: assignment makes integer from pointer without a cast

RESOLU warning: assignment makes integer from pointer without a cast - C - Programmation

Marsh Posté le 01-11-2007 à 19:38:57    

bonjour.
 
J'apprends le C, et j ai un probleme pour initialiser par le biais d'une fonction ma variable de structure.
 
Voila mon code source :
 
main.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #ifndef DEF_FONCTION_H
  5. #define DEF_FONCTION_H
  6. #include "fonction.h"
  7. #endif
  8. int main(int argc, char *argv[])
  9. {
  10. player player1;
  11. initialiser(&player1);
  12. printf("nom: %ls", player1.nom);
  13. return 0;
  14. }


 
fonction.c
 

Code :
  1. #ifndef DEF_FONCTION_H
  2. #define DEF_FONCTION_H
  3. #include "fonction.h"
  4. #endif
  5. void initialiser(player* point)
  6. {
  7. *point->nom = "abc" ;  // LIGNE 10
  8. *point->prenom = "" ;  // 11
  9. (*point).age = 21;
  10. *point->pays = "" ;   // 13
  11. }
  12. fonction.h
  13. [cpp]
  14. typedef struct player player;
  15. struct player {
  16.   char nom[50];
  17.   char prenom[50];
  18.   long age;
  19.   char pays[70];
  20. };
  21. void initialiser(player* point);


 
En fait ca m'initialise l'age mais pas le nom prenom pays... les types char quoi.
 
quand j affiche l age ca marche (par exemple je met 17)
nom prenom... ca n'affiche rien.
 
En faisant rebuild j'ai ces messages d'erreur :
 
warning: assignment makes integer from pointer without a cast
 
ligne 10, 11 et 13 dans fonction.c
 
Je bloque là dessus et je ne trouve pas d'ou viens l'erreur..
 
Merci d'avance pour vos explications
 
Cordialement


Message édité par schtek2 le 01-11-2007 à 21:23:42
Reply

Marsh Posté le 01-11-2007 à 19:38:57   

Reply

Marsh Posté le 01-11-2007 à 19:48:25    

mauvaise utilisation de l'opérateur ->
 
(*point).age est équivalent à point->age

Reply

Marsh Posté le 01-11-2007 à 19:54:56    

did-54 a écrit :

mauvaise utilisation de l'opérateur ->
 
(*point).age est équivalent à point->age


 
J'ai corrigé ça merci.
 
Cependant toujours les meme problemes avec mes char...
 
Quand je les affiche ca m affiche 3 caracteres ou symboles bizarre dans la console

Reply

Marsh Posté le 01-11-2007 à 20:04:38    

Code :
  1. strcpy (point->nom, "abc" );
  2. [...]


Message cité 1 fois
Message édité par mcyrb le 01-11-2007 à 20:29:35
Reply

Marsh Posté le 01-11-2007 à 20:11:44    

mcyrb a écrit :

Code :
  1. strcpy (point->nom, "abc" );
  2. [...]




 
Ca marche merci beaucoup !
 
Cependant, sans vouloir vous embeter, je ne comprends pas pourquoi ca ne marchai pas.
 
Où était mon erreur ? On doit pouvoir faire ça sans la fonction strcpy non ???

Reply

Marsh Posté le 01-11-2007 à 20:26:38    

Tu peux recoder strcpy en recopiant les caractères un par un si le coeur t'en dis, mais j'en vois pas trop l'intérêt.

 

Les grands experts du C ici présents me reprendront sûrement, mais lorsque tu fais une affectation entre pointeurs, ce n'est qu'une adresse que tu copies... je ne sais pas trop quelle est l'adresse de cette constante "abc", mais elle ne doit plus correspondre à quelque chose de viable en sortant de ta fonction (si tant est qu'elle l'ait été un jour...).

Message cité 1 fois
Message édité par mcyrb le 01-11-2007 à 20:30:35
Reply

Marsh Posté le 01-11-2007 à 21:20:14    

Code :
  1. printf("nom: %ls", player1.nom);


 Oula, c'est %s le format pour imprimer du char *, %ls c'est du wchar_t *, erreur qui aurait du t'être affichée avec les flag kivonbien de ton compilateur.

Reply

Marsh Posté le 01-11-2007 à 21:21:44    

mcyrb a écrit :

Tu peux recoder strcpy en recopiant les caractères un par un si le coeur t'en dis, mais j'en vois pas trop l'intérêt.
 
Les grands experts du C ici présents me reprendront sûrement, mais lorsque tu fais une affectation entre pointeurs, ce n'est qu'une adresse que tu copies... je ne sais pas trop quelle est l'adresse de cette constante "abc", mais elle ne doit plus correspondre à quelque chose de viable en sortant de ta fonction (si tant est qu'elle l'ait été un jour...).


 
A d'accord, je pensai pas qu'il fallai refaire une fonction similaire pour ca... Je sors du php donc.. lol
 
En tout cas merci je sais que je dois utiliser cette fonction désormais.
 
 :hello:

Reply

Marsh Posté le 03-11-2007 à 14:25:32    

schtek2 a écrit :


 
A d'accord, je pensai pas qu'il fallai refaire une fonction similaire pour ca... Je sors du php donc.. lol
 
En tout cas merci je sais que je dois utiliser cette fonction désormais.


Euh, le C, ça ne s'invente pas, ça ne se devine  pas, ça s'apprend. Il y a des références de tutoriels et de cours sur ce site et sur le mien.


---------------
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/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed