Incrémenter une variable... ? [Résolu]

Zootella 252 Messages postés vendredi 10 juin 2005Date d'inscription 5 septembre 2006 Dernière intervention - 16 juin 2005 à 21:23 - Dernière réponse : cs_neria 320 Messages postés vendredi 21 février 2003Date d'inscription 16 février 2009 Dernière intervention
- 17 juin 2005 à 06:56
Hello,



Est-ce possible d'incrémenter une variable ?



Par exemple avec une boucle for:



char resstr1[1024];

char resstr2[1024];

char resstr3[1024];

...



int ResourceMax = 8001;



for ( int i = 0; i < 25; i++)

{

LoadString(hInstance, ResourceMax, resstr1, 1024);

ResourceMax++;

}



Dans cet exemple je voudrais qu'il incrémente resstr1, mais est-ce possible ?
Afficher la suite 

5 réponses

Répondre au sujet
cs_neria 320 Messages postés vendredi 21 février 2003Date d'inscription 16 février 2009 Dernière intervention - 16 juin 2005 à 21:54
+3
Utile
Salut !

Il suffit de faire un tableau de pointeur et de l'intégrer dans ta boucle :

// Tableau de 25 tableaux (char*)
char** ress = new char*[25];

// ou char* ress[25] ; selon tes goûts pour les pointeurs

for ( int i = 0; i < 25; i++)
{
// Affecte l'espace au char*
ress[i] = new char[1024] ;
LoadString(hInstance, ResourceMax, ress[i], 1024);
ResourceMax++;
}

Bon ok ça demande une petite connaissance des pointeurs, mais c'est un jeu marrant je trouve :) Et si tu es en C, il faut utiliser malloc ( ress[i] = malloc(sizeof(char),1024) ; ) Idem pour la première allocation, et surtout n'oublie pas de libérer la mémoire après utilisation !!

@+ Neria
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_neria
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 16 juin 2005 à 22:23
+3
Utile
Mais comme il n'y a aucun interet a "s'emmerder" avec une double allocation alors que la taille est connue,



char resstr[25][1024];



for ( int i = 0; i < sizeof resstr / sizeof resstr[0]; i++)

{

LoadString(hInstance, ResourceMax, resstr[i], sizeof resstr[0]);

ResourceMax++;

}



ps: sizeof(char) vaut 1, c'est sur.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de steve_clamage
Zootella 252 Messages postés vendredi 10 juin 2005Date d'inscription 5 septembre 2006 Dernière intervention - 16 juin 2005 à 22:25
0
Utile
Donc j'obtiens ceci :



void LoadStr(HINSTANCE hInstance)

{

int ResourceMax = 8001;

char * ress[25] ;

int i;



for ( i = 0; i < 25; i++)

{

ress[i] = malloc(1024);

LoadString(hInstance, ResourceMax, ress[i], 1024);

ResourceMax++;

}

...

free(ress);

}



Merci, juste un truc : "new" ne fonctionne pas sous dev-cpp, enfin pour moi... pourquoi ?



`new' undeclared (first use in this function)
Commenter la réponse de Zootella
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 16 juin 2005 à 22:59
0
Utile
new n'est pas une fonction, c'est un opérateur du langage C++. Si tu
fais du C utilises malloc (ou calloc, realloc) et free pour gerer
dynamiquement la mémoire.



Une erreur:

free(ress);

à remplacer par

for ( i = 0; i < sizeof ress / sizeof ress[0]; i++)

{

free(ress[i]);

}



Mais l'allocation dynamique ne sert à rien dans ce cas, utilises tout simplement un tableau:

char resstr[25][1024];
Commenter la réponse de steve_clamage
cs_neria 320 Messages postés vendredi 21 février 2003Date d'inscription 16 février 2009 Dernière intervention - 17 juin 2005 à 06:56
0
Utile
Salut !

C'est vrai qu'en y relechissant un peu, un simple ress[25][1024] suffit, je n'y ais pensé que trop tard, j'ai tellement l'habitude de passer par les pointeurs que je n sais plus faire les trucs basique ;)

@+ Neria
Commenter la réponse de cs_neria

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.