C fonction retourne array

Nmy

Touriste
Bonsoir,


j'ai écrit un p 'fit code pour mes cours puisque je débute en c....

Je cherche à retourner un tableau de valeur dans une fonction....

mais ça pose problème...

#include <stdio.h>


int convert ( int iNumber, int iBase ) {
int cResult[sizeof(int)];
int iCompteur = 0;

while ( iNumber != 0 ) {
cResult[iCompteur] = iNumber % iBase;
iNumber = iNumber / iBase;
iCompteur++;

}
iCompteur = iCompteur - 1;
while ( iCompteur >= 0 ) {
printf("%d", cResult[iCompteur]);
iCompteur--;
}
printf("\n");

//return cResult;
}

int main (int argc, const char * argv[])
{

// insert code here...
convert(10,2);

return 0;
}
 

Jereck

Α & Ω
Staff
Le C, ça fait longtemps, mais à première vue, tu devrais plutot retourner un pointeur

int* convert ( int iNumber, int iBase )
 
Wouaw ... il y a beaucoup de choses à revoir dans ton code !

1) L'identation :-(
2) Retourner un tableau tu pourras pas, donc faut retourner un pointeur vers une zone mémoire
3) Si tu veux retourner un pointeur vers une zone mémoire que tu alloues DANS ta fonction, tu dois le faire dynamiquement à l'aide d'un MALLOC() sinon ben ... tu vas retourner un pointeur vers une zone mémoire qui correspondra à n'importe quoi.

4) La déclaration de ton tableau int cResult[sizeof(int)]; c'est un peu merdique car j'ai envie de dire que tu déclares un tableau de 4 int (car en général la taille d'un int c'est 4 bytes même si ça dépends du système sur lequel tu es (d'ou l’intérêt du sizeof())) et à priori je pense pas que c'est vraiment ce que tu veux faire...

Il est tard, je pourrais corriger ton code, mais essaye de corriger par toi-même puisque ton but est d'apprendre et comme ça moi ce soir je vais me reposer (mais ça on s'en fou).

Si demain t'as pas trouvé je te ferai une correction
 

Jereck

Α & Ω
Staff
Lio, essaie de mettre de l'indentation sur GamerZ ;)
 

kronoss

Geek power
Les joie des tableau en c, ça ne me manque pas :-D
 
1er
OP
Nmy

Nmy

Touriste
j'ai corrigé ceci :


http://pastebin.com/SAg4KRs8


mais le soucis c'est qu'il me retourne ceci :


[Switching to process 1565 thread 0x0]
1051136Program ended with exit code: 0

au lieu de 01

j'ai enlever le code pour inverser le tableau....
 

Skarbone

Le méchant Ω
Hmm, exit code 0 c'est bon en principe hein :D.

Par contre, je pige pas ton sizeof(int)*sizeof(int), ca doit marcher sans problemes, mais tu réserves un espace mémoire de "la taille d'un int fois la taille d'un int"... Ca n'a pas beaucoup de sens, même si ca marche..
 
1er
OP
Nmy

Nmy

Touriste
je débute....donc connais pas toutes les astuces sinon j'aurais déclarer comme ceci:


int * cResult = malloc(sizeof(int));



le soucis le code fonctionne oui....mais pour avoir le résultat complet je dois faire une boucle de cResult pour avoir tout ce qui se trouve dans le tableau....


sauf que une fonction dois tirs retourner une valeur mais je ne sais pas si elle "peut" retourner une valeur mise dans une boucle

genre return cResult dans une boucle ?

autant commencer par bien faire les choses...
 

Skarbone

Le méchant Ω
- pour réserver de l'espace pour 4 entiers (par exemple), tu fais malloc(sizeof(int) * 4). Tu réserve la taille d'un entier fois 4, donc pour 4 entier.

Sinon bah tu dois parcourir le tableau qui a été renvoyé quoi... Donc c'est dans le main que tu le parcours. Le probleme c'est qu'ici tu fous ton tableau dans un bête entier...

Fous le plutot dans un pointeur d'entier, de cette manière tu pourra le parcourir.

(j'espère que je dit pas de conneries, mon C est rouillé)
 
Lio, essaie de mettre de l'indentation sur GamerZ ;)
Juste :)

Mais avec la balise CODE ça marche pas ?

Enfin soit, je vois qu'on aide le gaillard, notamment au sujet du malloc :) ça me semble bien !

Si tu alloues pas la bonne taille, en incrémentant ton pointeur, tu risques de pointer "n'importe ou dans le mémoire" ou en tous les cas dans une zone qui ne t'es pas forcément allouée, d'où certaines erreurs !
 
Haut