Bonjour,
Je rentre :
Cependant je croyais que char ne contenait qu'un seul caractère.Code:
1
2
3 const char *g = "Essai"; cout << "La chaîne g contient " << g << endl;
Merci d'avance.
Version imprimable
Bonjour,
Je rentre :
Cependant je croyais que char ne contenait qu'un seul caractère.Code:
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.
:arrow: *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:
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:
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:
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.
Bonjour,
Comment fais-t'on un tel cast?
J'ai essayé avec atoi mais ca n'a pas marché.
Merci pour vos réponses.
Merci pour le lien.
J'ai fait:
Mais ca donne toujours:Code:
1
2
3
4
5 const char *g = "Essai"; // erreur reinterpret_cast<const int *>(g); cout << g << endl; // a voir cout << *g << endl;
Code:
1
2
3Essai // ce n'est toujours pas une adresse. E
edit : reinterpret_cast est une fonction renvoyant le paramètre interprété du type demandé. Ici g sera donc retourné sous la forme d'un const void *.Code:
1
2
3 const char *g = "Essai"; std::cout << g << std::endl; // affiche Essai std::cout << reinterpret_cast<const void*>(g) << std::endl; // affiche 0x....
Tu peux stocker ce résultat si tu en à besoinCode:const void *ptr = reinterpret_cast<const void*>(g);
Merci pour les réponses.