Bonjour,
Je rentre :
Cependant je croyais que char ne contenait qu'un seul caractère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const char *g = "Essai"; cout << "La chaîne g contient " << g << endl;
Merci d'avance.
Bonjour,
Je rentre :
Cependant je croyais que char ne contenait qu'un seul caractère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const char *g = "Essai"; cout << "La chaîne g contient " << g << endl;
Merci d'avance.
Bonjour
Dans ton cas, le char * est une chaîne de caractère en C. (Un char * contient une adresse vers un char).
En C++, on préfèrera les std::string.
On peut mélanger C et C++?, mon fichier est un .cpp et j'utilise g++.
En c++, l'expression n'a pas de sens. Un pointeur sur un char (contennant a priori un seul caractère)
*p = "x" a un sens mais pas *p = "Essai".
A terme on devrait avoir une erreur de mémoire?
Bonjour,
Si p est un char *, tes deux expressions sont fausses.
*p = 'x' (ou p = "x" selon ce que tu souhaites) et p = "Essai".
Un char (note l'absence de l'étoile) représente bien un caractère.
Par contre un char * représente un pointeur sur char, et contient l'adresse d'un char. Et cette adresse peut très bien désigner celle du premier caractère d'une chaine de caractères C, délimitée par un '\0' final.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char p; p = 'x';
À noter : "x" représente une chaine de caractères constituée de {'x', '\0'}, tandis que 'x' représente le caractère x.
En modifiant mon programme j'obtiens:
et comme sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int a = 12; int *p = &a; const char *g = "Essai"; // erreur cout << p << endl; cout << *p << endl; cout << g << endl; cout << *g << endl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 0xbfa55284 12 Essai // ---->>Pourquoi n'est ce pas une adresse? E // ok
Parce que l'operator<< de std::cout possède une surcharge pour les const char*, qui lui permet donc de les afficher en temps que chaîne de caractères.
Si tu fais un cast vers un const int*, qui n'a pas de surcharge (en réalité si, la surcharge qui prend les pointeurs !), alors tu verras l'adresse de cette chaîne.
Partager