Подтвердить что ты не робот

"printf" на струнах печатает тарабарщину

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

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

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

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

4b9b3361

Ответ 1

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

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string s("bla");
  std::cout << s << "\n";
}

Ответ 2

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

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

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

string s("bla");
std::cout<<s;

Ответ 3

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

#include <string.h>

к

#include <string>

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

Ответ 4

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

char s[]="bla";