Ordre de déclaration des variables ...

icedreamer Messages postés 26 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 21 avril 2005 - 9 mars 2004 à 07:52
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 9 mars 2004 à 21:04
Salut.

Je continue mon petit prog et les pb suivent aussi ..

Il semble que l'ordre de déclaration de mes variables joue un role dans le focntionnement de mon code !!!

Comme ca, ca marche :

char tmp2[1];
char* buf = "";
char srt[MAX_PATH] = "";
int i,j,k;
char tmp3[2];
int ind;
char* bufsrt = "";
char trsf[3];
int nbt,nbi;
char tmp[1];

Mais comme ca, il me semble que me variable sont "vidées" alors qu'elles devraient être rensignées !! (ex:tmp2), alors que cela fonctionne avec la déclaration ci-dessus ...

char tmp[1];
char tmp2[1];
char tmp3[2];
char* buf = "";
char* bufsrt = "";
char srt[MAX_PATH] = "";

(Note j'utilise devc++)

Merci de votre aide.
A voir également:

11 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mars 2004 à 08:23
Les variables ne sont pas initialisées. Il faut rajouter
char tmp[1] = "";
int nb = 0;
par exemple. sinon en effet, l'ordre peut faire varier ce que contiennent les variables lors de leur création.
0
icedreamer Messages postés 26 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 21 avril 2005
9 mars 2004 à 12:47
Je l'ai essayé et j'ai toujours le prob.

Ne marche pas pour tmp :

char tmp[1] = "";
char tmp2[1] = "";
char tmp3[2] = "";
char trsf[3] = "";
char srt[MAX_PATH] = "";
char* buf = "";
char* bufsrt = "";

Marche pour tmp :

char tmp2[1] = "";
char tmp3[2] = "";
char trsf[3] = "";
char srt[MAX_PATH] = "";
char* buf = "";
char* bufsrt = "";
char tmp[1] = "";

Je ne comprends pas ...
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mars 2004 à 12:57
En fait, ça doit dépendre de ce que tu appelles ne marche pas. Il ne semble pas y avoir de code dans ton message d'origine.
0
icedreamer Messages postés 26 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 21 avril 2005
9 mars 2004 à 13:20
oui, en voici un morceau

buf = (char*)GlobalAlloc(GPTR, len + 1);
GetDlgItemText(hwnd, IDC_MAIN_EDIT1, buf, len + 1);
//MessageBox(hwnd, buf,"Buffer", MB_OK | MB_APPLMODAL);

nbt=0;
while (j<=len)
{
strcpy(tmp,"");
strncat(tmp,buf+i,1);
//MessageBox(hwnd, tmp,"Entrée", MB_OK | MB_APPLMODAL);

k=1;
ind=0;
while (k<=g_NbCar)
{
strcpy(tmp2,"");
strncat(tmp2,tbl_A[k],1);

MessageBox(hwnd, tmp,"Entrée", MB_OK | MB_APPLMODAL);
MessageBox(hwnd, tmp2,"Alpha", MB_OK | MB_APPLMODAL);

if (strcmp(tmp2,tmp)==0)
etc...

Malheureusement la valeur de tmp est A au premier coup puis ' ' après ...

Merci de m'aider
0

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

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 mars 2004 à 14:59
faudrait voir à déclarer des chaînes de caractères plus grandes (les variables tmp ne peuvent contenir qu'UN SEUL caractère à savoir le nul de terminaison). Comme tu en écrit plus (tu les ajoutes par strcat), tu écrase les variables déclarées après alors qu'elles n'ont rien demandée.
0
icedreamer Messages postés 26 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 21 avril 2005
9 mars 2004 à 17:53
Il semble que ce soit la bonne réponse.
Merci à tous de votre aide !
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 mars 2004 à 20:39
mine de rien ton topic m'a rappeller que l'ordre de declaration des variable compte en effet a propos de l'espace memoire utiliser

bien sur aujourd'hui, au vudes quantiter de memoire dispo, ca n'a plus beaucou d'importance, et les compilo font peut etre qq optimisations

cependant il me semble que si on fait

char c;
int i;

au lieu de

int i;
char c;

on gagne 3 octets

alors, est ce que je dit une connerie ? :D
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mars 2004 à 20:43
ça dépend pas de la méthode d'alignement du compilateur ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 mars 2004 à 20:56
oui c'est exactement ca, qu'en est il aussi?

c'est propres au compilo?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
9 mars 2004 à 21:00
je crois que ça dépend du compilo et du processeur.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 mars 2004 à 21:04
ouai du processeur, plus precisement de la largeur de son databus

apres en effet le compilo fait ce qu'il veut... (a peu de chose pres)
0
Rejoignez-nous