Copie de tableau de char [Résolu]

Signaler
Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016
-
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour
  je fais une requete mysql, puis dans un row j'ai le résultat, je sais aussi que la longueur de prix > longueur row
  Mon programme ne marche pas :

int requete(char ** prix) {
...
int i= 0

...
strncpy(prix[i],row[0],sizeof(prix[i]));
prix[sizeof(prix[i]) - 1] = ' \0 ';
i++;
...

}

...
char** prix = (char **)malloc(12*sizeof(char*));
requete(prix);
...

7 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ça c'est une warning, ça n'empêche pas la compilation.

return (**c);

C'est quoi ça ? Tu retournes la valeur pointée par le premier pointeur...
Ne change pas l'implémentation que je t'ai fourni
void **malloc2d (unsigned int num, unsigned int size)
{
    char **c, **d, *p;
    if(!num || !size) return 0; //<- à retirer dans un code sûr
    
    if(!(c = (char**)malloc((num*size)+(num*sizeof(char*))))) return 0;    d c; p (char*)(c+num);
    
    do *d++ = p+(--num*size); while(num);
    // OU
    // do *(d+(--num)) = p+(num*size); while(num);
    
    return (void**)c;
}

char **prix;
prix = (char**)malloc2d(12,4);
while(row = mysql_fetch_row(res)) {
         memcpy(prix[i], row[0],4);
}

Voilà. Devrait passer là.

C++ (@++)<!--
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Euh, c'est quoi le problème ?
Ca marche pas c'est un peu vague !!! tu peux expliquer le comportement actuel !
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
sizeof(prix[i])
Un pointeur pesant 4 octets (en 32 bits), sizeof d'un pointeur égal toujours 4.

char** prix= (char **)malloc(12*sizeof(char*));
Hmm. Je ne sais pas trop ce que tu souhaites faire ici mais si tu veux allouer de la mémoire pour tes pointeurs, on ne procède pas comme ca.
Voir:
http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx

C++ (@++)<!--
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009

prix[sizeof(prix[i]) - 1] = '\0';
alors que prix est un tableau de chaînes de caractères ?

Je ne comprends pas non plus pourquoi sizeof(prix[i]) au lieu de strlen(prix[i]) mais c'est sûrement moi qui n'ai pas exactement compris ce que tu voulais faire...
Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016

 char **malloc2d (unsigned int num, unsigned int size)
{
    char **c, **d, *p;
    if(!(c = (char**)malloc((num*size)+(num*sizeof(char*))))) return 0;    d c; p (char*)(c+num);
    do *d++ = p+(--num*size); while(num);
    return (**c);
}
...

char **prix;
prix = malloc2d(12,4);
while(row = mysql_fetch_row(res)) {
         memcpy(prix[i], row[0],4);
}
Ne compile pas !
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Serait interessent de savoir le message d'erreur du compilateur.

C++ (@++)<!--
Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016

In function 'malloc2d':
warning: return makes pointer from integer without a cast