Copie de tableau de char [Résolu]

Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016
- - Dernière réponse : SAKingdom
Messages postés
3213
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);
...
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
3
Merci
Ç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++ (@++)<!--

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
0
Merci
Euh, c'est quoi le problème ?
Ca marche pas c'est un peu vague !!! tu peux expliquer le comportement actuel !
Commenter la réponse de fregolo52
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
0
Merci
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...
Commenter la réponse de spidermario
Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016
0
Merci
 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 !
Commenter la réponse de cs_majong
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
Serait interessent de savoir le message d'erreur du compilateur.

C++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
45
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
18 octobre 2016
0
Merci
In function 'malloc2d':
warning: return makes pointer from integer without a cast
Commenter la réponse de cs_majong