Incrémenter une variable... ?

[Résolu]
Signaler
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009
-
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 ?

5 réponses

Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

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
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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.
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
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)
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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];
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

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