Copie de tableau de char

Résolu
cs_majong Messages postés 47 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 juin 2020 - 3 sept. 2008 à 10:31
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 9 oct. 2008 à 16:28
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 oct. 2008 à 16:28
Ç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++ (@++)<!--
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
3 sept. 2008 à 14:53
Euh, c'est quoi le problème ?
Ca marche pas c'est un peu vague !!! tu peux expliquer le comportement actuel !
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
4 sept. 2008 à 03:02
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++ (@++)<!--
0
spidermario Messages postés 121 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 14 mars 2009 1
7 sept. 2008 à 09:46
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_majong Messages postés 47 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 juin 2020
9 oct. 2008 à 16:09
 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 !
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 oct. 2008 à 16:13
Serait interessent de savoir le message d'erreur du compilateur.

C++ (@++)<!--
0
cs_majong Messages postés 47 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 juin 2020
9 oct. 2008 à 16:19
In function 'malloc2d':
warning: return makes pointer from integer without a cast
0
Rejoignez-nous