[C] char ***, char **, char * ?

Résolu/Fermé
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 11 mai 2005 à 14:36
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 11 mai 2005 à 20:55
Bonjours,

je vous demande de l'aide pour la chose suivante :
je voudrais créer un tableau à deux dimension qui recueillera uniquement des char *.
Ce tableau doit être créé dinamiquement dans un double boucle.
Pour cela, j'ai pensé à faire un truc de ce style :
Code:
typedef  TYPE (char *t[2]); 


int fonction ( ) { 
 TYPE *tab; 

 ... ici doit se faire le remplissage du tableau avec des chaines... 
} 
 



Qqun peut-t-il me dire si la syntaxe du typedef est bonne ou non, si l'idée est là ou sinon ce qu'il est préférable de faire pour cela.

Autre précision : en fait la taille de t[] n'est pas forcément 2, justement, ca aussi il faut allouer dynamiquement la taille.
En fait c'est pour récupérer des lignes de champ suite à une requete SELECT sur une DB

Je me demande aussi s'il ne faut pas utiliser ceci :
char ***tab;
char **ligne;
char *champ;



Et faire l'allocation de tous ce petit monde au fur et à mesure ?
Bref, ma question est multiple quoi !

merci à tous.

++

3 réponses

m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 14:45
pourquoi ne fais tu pas :
struct tab{
cahr *ligne
};
struct ligne{
char *champ
};

ou un truc ds le genre??
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 14:48
Car ce ne sera pas simple pour lire par la suite :
imagine que tu effectue un select sur une base, que tu souhaite récupérer un champ de ce select pour effectuer une autre requete sur la base dans la même foulée, et bien avec un tableau double entrée, une simple double boucle de parcours du tableau de retour de la premiere requete et c'est bon, alors qu'avec une structure...

mais en fait c bon j'ai ma solution :
*arr = malloc(nb_lines * sizeof *arr); 
   if(!*arr) { /* erreur d'allocation */ } 
   for(l=0; l<nb_lines; l++) 
   { 
      arr[l] = malloc(nb_colonnes); /* sizeof char vaut 1 par definition */ 
      if(!arr[l]) { /* erreur d'allocation */ } 
   } 



merci quand même

++
0
SKZ > kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
11 mai 2005 à 20:44
Et t'es sûr que ça marche ???

*arr = malloc(nb_lines * sizeof *arr); 

Cette ligne est fausse. il faut " arr = malloc(..."
De plus, sizeof(*arr) n'a aucun sens ! (Puisque arr est un pointeur non alloué, sinon c'est la ligne qui n'en a aucun... :-/ )

   if(!*arr) { /* erreur d'allocation */ } 

Encore une fois, faut supprimer l'*

   for(l=0; l<nb_lines; l++) 
   { 
      arr[l] = malloc(nb_colonnes); /* sizeof char vaut 1 par definition */ 

WARNING : Quand on passera en UNICODE, sizeof(char) vaudra 2.
0