Structure chainée

Structure chainée - C - Programmation

Marsh Posté le 29-04-2011 à 16:46:00    

Bonjour,
 
Je dispose des structures suivantes :

Code :
  1. #define SIZE 5
  2. #define SIZETAB 10
  3. typedef struct
  4. {
  5.     char s[SIZE];
  6.     int next;
  7. }sauvegarde;
  8. typedef struct
  9. {
  10.     int posDispo;
  11.     sauvegarde tab [SIZETAB];
  12. }table;


Il y a donc, un tableau de sauvegarde, qui contient un champ next et une chaine de caractères s.
Mon souhait est d'initialiser une table, avec la fonction suivante :

Code :
  1. void initialisation(table*t)
  2. {
  3.     int i;
  4.     for(i=0;i<=SIZETAB;i++)
  5.     {
  6.           t->tab[i].s="";
  7.           t->tab[i].next=-1;
  8.     }
  9.     t->posDispo=SIZETABLE+1;
  10. }


Sauf que ça ne passe pas à la compilation, il y a un problème à la ligne en rouge, à vrai dire je ne sais pas trop comment faire pour initialiser la chaine s, étant donné qu'elle a déjà une taille définie.  
 
Je bloque sur ça, c'est pourquoi je sollicite votre aide.

Reply

Marsh Posté le 29-04-2011 à 16:46:00   

Reply

Marsh Posté le 29-04-2011 à 17:03:45    

Alors, en "bourrin", il y a :
 

Code :
  1. memset ( (void *) t->tab[i].s , 0 , SIZE );


 
mais si "tab[i].s" est une chaine de caractère, il suffit de mettre '\0' dans le premier octet de la chaine :
 

Code :
  1. t->tab[i].s='\0';

Reply

Marsh Posté le 29-04-2011 à 17:28:02    

J'ai essayé la solution 2, et ça donne ce message d'erreur : incompatible types when assignning to type 'char[5]' from type 'int'
c'est étrange puisque '\0' est entre cotes donc ça devrait être un caractère et pas une entier.
 
Et si je mets :

Code :
  1. t->tab[i].s="0";


il y a l'erreur : incompatible types when assignning to type 'char[5]' from type 'char*'


Message édité par maximix le 29-04-2011 à 17:29:01
Reply

Marsh Posté le 29-04-2011 à 17:31:11    

Et t->tab[i].s[0]='\0'; ou encore *(t->tab[i].s)='\0'; ça ne marche pas ?


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 29-04-2011 à 17:48:14    

oups... en effet, j'ai oublié le "[0]" après le 's', d'où l'erreur de type.
 
La solution de WiiDS doit marcher.

Reply

Marsh Posté le 29-04-2011 à 17:59:51    

ah oui ça fonctionne, merci bien.
et pour initialiser avec une valeur donné comme par exemple "abc"  
 
j'essaye de faire : t->tab[i].s="abc"; mais ça ne passe pas, j'ai le même type d'erreur qu'au dessus

Reply

Marsh Posté le 29-04-2011 à 18:03:23    

tu dois passer par une fonction, comme "strncpy".

Reply

Sujets relatifs:

Leave a Replay

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