"printf" на струнах печатает бред - PullRequest
14 голосов
/ 03 сентября 2010

Я пытаюсь напечатать строку следующим образом:

int main(){
    string s("bla");
    printf("%s \n", s);
         .......
}

но все, что я получаю, это случайный бред.

Не могли бы вы объяснить, почему?

Ответы [ 4 ]

25 голосов
/ 03 сентября 2010

Поскольку %s обозначает char*, а не std::string. Используйте s.c_str() или, что еще лучше, используйте iostreams:

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string s("bla");
  std::cout << s << "\n";
}
18 голосов
/ 03 сентября 2010

Вам нужно использовать c_str , чтобы получить c-строку, эквивалентную строковому содержимому, так как printf не знает, как напечатать строковый объект.

string s("bla");
printf("%s \n", s.c_str());

Вместо этого вы можетепросто сделайте:

string s("bla");
std::cout<<s;
1 голос
/ 03 сентября 2010

Мне удалось напечатать строку, используя "cout", когда я переключился с:

#include <string.h>

до

#include <string>

Хотелось бы мне понять, почему это важно ...

0 голосов
/ 20 июля 2013

Почему бы вам просто не использовать

char s[]="bla";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...