"printf" на струнах печатает тарабарщину Я пытаюсь напечатать строку следующим образом: int main(){ string s("bla"); printf("%s \n", s); ....... } но все, что я получаю, это случайная бред. Не могли бы вы объяснить, почему? Ответ 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";
Ответ 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> Я бы хотел понять, почему это важно...