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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 const char *g = "Essai"; // erreur reinterpret_cast<const int *>(g); cout << g << endl; // a voir cout << *g << endl;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 à besoin
Code : Sélectionner tout - Visualiser dans une fenêtre à part const void *ptr = reinterpret_cast<const void*>(g);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager