C ++ и printf - вывод странных символов - PullRequest
7 голосов
/ 14 октября 2011

Я полный новичок в C ++, но не в Java, C #, JavaScript, VB.Я работаю с консольным приложением C ++ по умолчанию из Visual Studio 2010.

При попытке сделать printf я получаю некоторые странные символы.Не то же самое каждый раз, что говорит мне, что они могут смотреть на разные места памяти каждый раз, когда я запускаю его.

Ответы [ 6 ]

10 голосов
/ 14 октября 2011

Проблема в том, что printf / scanf небезопасны.Вы предоставляете объект std::string, где printf ожидает const char*.

Один из способов исправить это - написать

printf("Hello %s", p.first_name.c_str());

Однако, поскольку вы кодируете вC ++, это хорошая идея использовать потоки ввода / вывода вместо printf / scanf:

std::cout << p.first_name << std::endl;
std::cin >> c;
4 голосов
/ 14 октября 2011

Преобразовать строку в строку c.

printf("Hello %s", p.first_name.c_str()); 

Кроме того, поскольку вы используете C ++, вы должны узнать о cout, а не о printf!

2 голосов
/ 14 октября 2011

Вы не можете передавать объекты C ++ std::string в printf. printf понимает только такие примитивные типы, как int, float и char*. Ваш компилятор должен предупреждать вас; если нет, увеличьте уровень предупреждения.

Поскольку вы используете C ++, вам действительно следует использовать std::cout для вывода текста, и это понимает std::string объекты. Если вам действительно нужно по какой-то причине использовать printf, преобразуйте std::string в const char*, вызвав для него метод c_str().

2 голосов
/ 14 октября 2011
printf("Hello %s", p.first_name.c_str());

Однако, почему вы не используете iostream, если вы используете c ++?

2 голосов
/ 14 октября 2011

Использование printf("Hello %s",p.first_name.c_str());!

0 голосов
/ 14 октября 2011

printf("%s") принимает строку в стиле c, оканчивающуюся на '\0'. Однако объект string является объектом C ++, который отличается от строки в стиле c. Вы должны использовать std::cout, который перегружен для прямой обработки типа string, как показано ниже.

std::cout << p.first_name;
...