[C] probleme structure et pointeur

probleme structure et pointeur [C] - C++ - Programmation

Marsh Posté le 20-05-2002 à 04:22:57    

Salut,
 
J'essaie de realiser un programme en c et je me heurte a un probleme:
 
j'ai une structure config comme ceci:
 
struct conf_plugin {
gchar chemin_temp[255];
etc
}
struct conf_plugin config;
 
Le probleme est avec la fonction:
 
gchar* gtk_file_selection_get_filename(blaba)
 
je voudrais faire quelque chose du genre:
config.cheminètemp = gtk_file_selection_filename(etc)
 
mais le compilo me dis: incompatible types in assignment
 
 
Comment je peux faire ?

Reply

Marsh Posté le 20-05-2002 à 04:22:57   

Reply

Marsh Posté le 20-05-2002 à 08:01:52    

char *name;
   
   name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data));
   strcpy(config.chemin_temp, name);
 
Mais la tu as un débordement de tampons, je verrais donc plus  
struct conf_plugin {
gchar *chemin_temp;
etc
}
 
   char *name;
   
   name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data));
   config.chemin_temp = malloc(strlen(name)+1);
   strcpy(config.chemin_temp, name);
 
Regarde les fonctions de la Glib, tu as pas mal de fonction qui aide bien ;)

Reply

Marsh Posté le 20-05-2002 à 08:09:29    

la premiere methode marche nikel !!!
 
 
merci beaucoup!!
 
PS: je voulais pas essayer la seconde car je me sers de ma variable a beaucoup d'autres endroits, sans avoir besoin de l'indirection
 
une derniere question, puisque tu as l'air cale:
 
c'est un probleme du compilo ou c'est moi qui ai pas tout compris ?

Reply

Marsh Posté le 20-05-2002 à 12:37:10    

apolon34 a écrit a écrit :

 
c'est un probleme du compilo ou c'est moi qui ai pas tout compris ?  




 
c'est toi qui n'as pas tout compris (enfin c'est toi qui demandais :) )
En fait, ton probleme c'est les chaines de caracteres en C.
Une chaine n'est pas un type en C, tu n'as que des pointeurs et des tableaux, donc il faut faire ce que tu veux faire (assignement de chaine) de maniere détournée ou en passant par les fonctions de librairie (strncpy, _strncpy)
 
A+
LEGREG

Reply

Marsh Posté le 20-05-2002 à 15:44:06    

en gros un tableau et un pointeur ne sont pas du meme type (meme si c est pas tout a fait vrai)
le compilo t empeche de faire tab = pointeur, pour eviter que tu fasses des conneries apres, c est tout!!
 
le compilo est ton ami, c est lui qui te previent si ce que tu fais est dangereux ou pas, voila!

 

[jfdsdjhfuetppo]--Message édité par tomate77 le 20-05-2002 à 15:44:25--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 20-05-2002 à 19:44:05    

Citation :

le compilo est ton ami, c est lui qui te previent si ce que tu fais est dangereux ou pas, voila!


 
Pas tout a fait, il previent quand tu fais une TRES grosse connerie (qui va a l'encontre des regles d'ecriture du C).
Mais je te rassure en C, tu peux tout a fait ecrire du code
pourri sans que ton compilo gueule quoi que ce soit :D.
 
De plus, ta justification est inexacte: il ne gueule pas parce que tableau et pointeur ne sont pas du meme type
mais tout simplement parce que chemin_temp n'est pas une l-value.
(une variable qu'on ne peut pas reassigner)
 
D'ailleurs il est tout a fait légal de faire:

Code :
  1. char toto[255];
  2. char *tata = toto; // c'est valide


L'inverse n'est pas vrai pour la raison evoquée ci dessus
(toto n'est pas une l-value).

 

[jfdsdjhfuetppo]--Message édité par legreg le 20-05-2002 à 19:45:32--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 20-05-2002 à 19:52:31    

Okai, merci de vos explications a tous !!!

Reply

Sujets relatifs:

Leave a Replay

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