J'ai du code que, dans sa forme complète la plus petite qui présente le problème (être un bon citoyen lorsqu'il s'agit de poser des questions), résume essentiellement les suivantes:
[]
5 Réponses :
Vous ne pouvez pas ajouter de pointeur de caractère et un entier comme celui-là (vous pouvez, mais cela ne fera pas ce que vous attendez).
Vous aurez besoin de convertir le x en une chaîne en premier. Vous pouvez soit le faire hors de bande de la bande C en utilisant la fonction ITOA pour convertir l'entier en une chaîne: p> ou la voie STD avec un Sstream: std::cout << text << x;
Ne serait-il pas toujours dans des problèmes car x est de type int, pas de chaîne ou de caractère *?
Cela me donne [la valeur était
de -cb code> pour voir ce qui se passait là-bas.
Lorsque vous faites s + = x; code> il convertit entier 11 en caractères 11 et tente d'obtenir le caractère ASCII correspondant.
C ++ ne concaténe pas les chaînes à l'aide de l'opérateur +. Il n'y a pas non plus d'auto-promotion des types de données à la chaîne. P>
Vous devrez construire un "La valeur était:" code> est de type
const caractère [12] code>. Lorsque vous y ajoutez un entier, vous référencez efficacement un élément de ce tableau. Pour voir l'effet, changez
x code> sur
3 code>.
std :: string code> explicitement. Encore une fois, vous ne pouvez pas concaténer un
std :: string code> et un entier. Pour contourner ce problème, vous pouvez écrire dans un
std :: ostringstream code>: p>
Dans ce cas, étant donné que le nombre est 11 code> et la longueur de la chaîne est 11, le pointeur résultant pointe directement sur le terminateur NULL.
C'est du type const char [12] code>, réellement.
Char [11] Code> En réalité (je pense).
@paxdiablo: const Char [12] code>. Il est résilié à zéro implicitement.
@Gman: Merci, j'ai changé cela.
DÉSOLÉ 'COULAIS QUE VOUS ÊTES ÉCOUTE À QUE 12, je me suis malompté. Cependant, vous n'êtes pas vraiment dû au sujet du const code>. Bien qu'il soit indéfini d'essayer de les modifier, les littéraux de chaîne sont
char code>, pas
const caractère code>. Sauf les vastes qui ne sont pas
char code>, mais je suis toujours sûr que ce ne sont pas
const code> non plus, même si je ne les ai jamais utilisés. Pas que cela affecte mon uppote pour cette réponse :-)
ou alternativement, la déclaration peut être modifiée comme STD :: String S = String ("valeur était:") + x;
Il était utilisé pour être char [] code>, mais selon GLENMCCL.com/ansi_014. HTM Il a été décidé de le modifier en
Const Char [] Code>. Je ne sais pas si ce changement s'applique déjà ou si c'est pour la norme C ++ à venir.
@hype: Non, ça ne peut pas. Cela donne un pas de match pour 'opérateur +' dans std :: basic_string i> erreur.
@PAX: §2.13.4 / 1, C ++ 03: "Un littéral à chaîne ordinaire a le type" Tableau de N Const Char "et une durée de stockage statique (3.7), où n est la taille de la chaîne"
en C / C ++, vous ne pouvez pas ajouter un entier à un réseau de caractères à l'aide de l'opérateur + CODE> car un
Char CODE> TRAY décrit sur un pointeur. Pour ajouter un
int code> à une chaîne code>, utilisez
ostringstream code>:
Amusant :) C'est ce que nous payons pour la compatibilité C et le manque d'une chaîne Quoi qu'il en soit, je pense que la façon la plus lisible de le faire serait: p> parce que le type intégrée code>.
lexical_cast code> est
std :: string code> ici, la surcharge droite de
+ code > sera sélectionné. p> p>
Vous devez inclure code> pour cela pour "travailler" de manière conforme, à la manière.
Bon point, comment est-ce même la compilation?
GCC (Ubuntu 4.4.3-4ubuntu5) 4.4.3 Code> compile que sans erreur - peut-être que c'est juste pardonner. Dans tous les cas, l'ajout de chaîne n'aide pas, donc je vais l'ajouter à la question, donc nous sommes plus casher. Cependant, Xeo m'a frappé à ça, merci :-)