[C] char ***, char **, char * ?
Résolu
kij_82
Messages postés
4089
Date d'inscription
Statut
Contributeur
Dernière intervention
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
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:
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 :
Et faire l'allocation de tous ce petit monde au fur et à mesure ?
Bref, ma question est multiple quoi !
merci à tous.
++
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.
++
A voir également:
- Char(10) excel francais
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Liste déroulante excel - Guide
- Clé d'activation windows 10 - Guide
- Dernière version ccleaner gratuit français - Télécharger - Nettoyage
- Winrar 64 bits windows 10 français gratuit - Télécharger - Compression & Décompression
3 réponses
pourquoi ne fais tu pas :
struct tab{
cahr *ligne
};
struct ligne{
char *champ
};
ou un truc ds le genre??
struct tab{
cahr *ligne
};
struct ligne{
char *champ
};
ou un truc ds le genre??
Quand on passera en UNICODE
et pourquoi veux-tu passer en UNICODE ? et pourquoi un char fera 2 octets ???et pourquoi le soleil brille ?
et pourquoi veux-tu passer en UNICODE ? et pourquoi un char fera 2 octets ???et pourquoi le soleil brille ?
J'ai trouvé un truc de toute facon :
Enfin... ca y est ca marche !
:)
static char *** PerlPower(char * arg[], int taille, int *nbligne, int *nbchamp) { dSP; int count = 0, i = 0, j=0; char ***tableau = NULL; SV *tmp; SV *champ; AV *tab; AV *ligne; ENTER; SAVETMPS; PUSHMARK(SP); while( i < taille ) XPUSHs(sv_2mortal(newSVpv(arg[i++],0))); // depose la base dans la pile PUTBACK; count = perl_call_pv("lance", G_ARRAY); SPAGAIN; if(count != 0) { printf("Nombre de retour = %d\n",count); tab = (AV *) SvRV(POPs); *nbligne = av_len(tab)+1; tableau = malloc((*nbligne) * sizeof( **tableau) ); i=0; while( i < (*nbligne) ) { tmp = *av_fetch(tab, i, 0); if( SvTYPE(SvRV(tmp)) == SVt_NV ){ printf("Entier de taille %d\n",SvLEN(tmp)); } else { ligne = (AV *) SvRV(tmp); (*nbchamp) = av_len(ligne)+1; tableau[i] = malloc((*nbchamp) * sizeof( *tableau )); for( j=0; j<(*nbchamp); j++ ) { champ = *av_fetch(ligne, j, 0); tableau[i][j] = malloc( sizeof( SvLEN(champ) ) ); strcpy(tableau[i][j], (char *)SvRV(champ)); } } i++; } PUTBACK; FREETMPS; LEAVE; return tableau; }
Enfin... ca y est ca marche !
:)
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 :
merci quand même
++
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... :-/ )
Encore une fois, faut supprimer l'*
WARNING : Quand on passera en UNICODE, sizeof(char) vaudra 2.