8
votes

C ++ et Printf - Strange Picrer Sortie

Je suis un nouveaub complet à C ++, mais pas à Java, C #, JavaScript, VB. Je travaille avec une application de console C ++ par défaut de Visual Studio 2010.

En essayant de faire un imprimeur, je reçois des caractères étranges. PAS la même chose à chaque fois que cela me dit qu'ils peuvent regarder différents emplacement de mémoire chaque fois que je l'exécute.

code: xxx


1 commentaires

Utilisez COUT en C ++. Pour printf avec% s, vous auriez besoin de p.first_name.c_str () mais n'utilise pas printf in c ++.


6 Réponses :


2
votes

Utiliser printf ("bonjour% s", p.first_name.c_str ()); !


0 commentaires

2
votes
printf("Hello %s", p.first_name.c_str());
However, why aren't you using iostream, if you are using c++?

2 commentaires

+1 parce que je suis un tel nouveaub. Briser mes livres de C ++ à nouveau lorsque nous parlons.


Parce que iOSTREAM est très très très très très bien lent que celui de l'impression (). Fait beaucoup de choses que vous n'avez pas besoin. Google!



12
votes

Le problème est que printf / scanaf ne sont pas TypeAfe. Vous fournissez un objet std :: string objet où printf attend un const char * .

Un moyen de réparer ceci est d'écrire xxx

Cependant, étant donné que vous codez en C ++, il est judicieux d'utiliser des flux d'E / S de préférence à printf / / scanf : xxx


1 commentaires

Merci +1. Alors, y a-t-il un formatage équivalent à Printf en C ++?



2
votes

Vous ne pouvez pas passer c ++ std :: chaîne objets dans printf . printf ne comprend que les types primitifs tels que int , float et char * . Votre compilateur devrait vous donner un avertissement là-bas; Si ce n'est pas le cas, allumez votre niveau d'avertissement.

Étant donné que vous utilisez c ++, vous devez utiliser vraiment std :: COUT pour la sortie de texte, et cela comprend std :: string objets. Si vous devez vraiment utiliser printf pour une raison quelconque, convertissez la version std :: string sur un const char * en appelant le c_str () méthode sur elle.


0 commentaires

4
votes

Convertissez la chaîne en c-string. XXX

Également, puisque vous utilisez C ++, vous devez en apprendre davantage sur COUT par opposition à PrintF!


1 commentaires

+1 pour répondre à la question et ensuite le pousser dans la bonne direction.



0
votes

printf ("% s") code> Accepte une chaîne de style C qui est terminée par un '\ 0' code>. Cependant, l'objet code> string code> est un objet C ++ qui est différent d'une chaîne de style C. Vous devez utiliser std :: cout code> qui est surchargé pour gérer tringle code> directement, comme indiqué ci-dessous.

std::cout << p.first_name;


2 commentaires

OK, vous avez donc démontré comment sortir le prénom. Qu'en est-il du mot "bonjour"?


@JIM, pour "Bonjour" Op déjà le faisait déjà droit avec Printf. Vous devriez essayer d'identité la partie principale de la question, ignorant les autres parties triviales. Droit?