If problème

Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009 - 5 avril 2003 à 17:01
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009 - 6 avril 2003 à 13:20
J'ai un problème avec If :

char*variable1;
variable1 = "bonjour";
if (variable1 == "bonjour") cout << "variable1 est égale à bonjour" << endl;

Ce code n'affiche pas "variable1 est égale à bonjour" , pourquoi ?

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 avril 2003 à 17:11
char szBONJOUR[] = "bonjour";
char*variable1;
variable1 = szBONJOUR;
if (variable1 == szBONJOUR) cout << "variable1 est égale à bonjour" << endl;
Devrait aller mieux. variable1 est un pointeur !!!
BruNews, ciao...
0
Haldwin Messages postés 77 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 16 juin 2004
5 avril 2003 à 18:50
Tu as comme l'a dit BruNews un probleme de pointeurs:
Un pointeur est une adresse memoire dans laquelle tu peux mettre une adresse d'une autre case memoire... Or ici dans ton pointeur tu veux mettre une chaine de caracteres!!!
Il faut donc faire une allocation de memoire:

#include
#include <string.h>

int main(void)
{
char *variable1;
variable1 = new char[7+1]; // le "+1" permet de rajouter un \0 a la fin de ta chaine de caracteres .... Indispensable!
strcpy(variable1,"bonjour\0"); // Copie "bonjour" dans ton tableau(chaine de caracteres) "variable1"

// strcmp permet de comparer deux chaines de caracteres
if( (strcmp(variable1,"bonjour\0"))==0)
cout << "variable1 est égale à bonjour" << endl;

// Il faut a la fin de ton programme desalloué la memoire que tu as utilisé:
delete [] variable1;
return 0;

}

Il s'agit d'une autre facon que celle proposée par BruNews.
Dans celle ci tu utilises l'allocation dynamique de memoire ce qui est tres important en programmation...
Voila si tu as des questions n'hesites pas,
Bon dev,
<<-- H@ldwin -->>
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
5 avril 2003 à 22:22
en réponse à Haldwin

la ligne
strcpy(variable1,"bonjour\0");
peut prêter à confusion
ton allocation est faite correctement avec
variable1 = new char[7+1];
la place est donc réservée pour 'b' 'o' 'n' 'j' 'o' 'u' 'r' '\0'
la chaine "bonjour" EST EXACTEMENT REPRESENTEE comme cela
si tu rajoute un \0, après bonjour, tu en as alors deux.
Regardes la fenêtre "memory" sur la variable str suivante
char str[]="bonjour\0"; pour le voir
Heureusement que la fonction strcpy s'arrête de copier au premier '\0' sinon, tu aurais un écrasement mémoire
0
Haldwin Messages postés 77 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 16 juin 2004
5 avril 2003 à 23:40
Je suis d'accord avec toi VieuxLion pis comme ton nom l'indique tu es toujours la pour nous remettre sur la voie lors d'un petit moment d'egarement et ça c'est coooool!
Il est vrai qu'ayant vu pas mal de probleme avec les '\0', je me mefie mais la, je me suis un peu trop mefier, il est vrai!!!
Et j'y repense, c'est vrai que c'est un peu nul ce que j'ai ecris... Toutes mes excuses pour avoir donné un code faux.. Donc pour Hades53:
#include
#include <string.h>

int main(void)
{
char *variable1;
variable1 = new char[7+1]; // le "+1" permet de rajouter un \0 a la fin de ta chaine de caracteres .... Indispensable!
strcpy(variable1,"bonjour"); // Copie "bonjour" dans ton tableau(chaine de caracteres) "variable1"

// strcmp permet de comparer deux chaines de caracteres
if( (strcmp(variable1,"bonjour\0"))==0)
cout << "variable1 est égale à bonjour" << endl;

// Il faut a la fin de ton programme desalloué la memoire que tu as utilisé:
delete [] variable1;
return 0;

}

Voila la rectification est faites.... Et encore merci a toi Vieux Lion...
<<-- H@ldwin -->>
0

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

Posez votre question
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
6 avril 2003 à 13:20
Je vous remerci , maintenant ca marche :p
0
Rejoignez-nous