printf()令人惊讶的控制台输出

时间:2013-09-16 10:18:39

标签: c++ printf

我需要在几年后用C ++开发。无论如何,我在阅读我正在阅读的教程后遇到了问题。在编写下面的代码片段后,我希望在我的控制台中看到“Hello World”,但我只能看到'Debug:StrangeChars';什么地方出了错?

std::string myString("Hello World"); 
printf("* Debug: %s \n", myString);

5 个答案:

答案 0 :(得分:14)

printf依赖于你传递正确的参数。 %s需要char *,您传递了std::string

尝试(C路)

char myString[] = "Hello World";
printf("* Debug: %s \n", myString);

或(混合C / C ++方式)

std::string myString("Hello World"); 
printf("* Debug: %s \n", myString.c_str());

或C ++方式:

std::string myString("Hello World"); 
std::cout << "* Debug " << myString << std::endl;

答案 1 :(得分:3)

尝试

printf("* Debug %s \n", myString.c_str());

或更好:

std::cout << "* Debug " << mystring << std::endl;

答案 2 :(得分:1)

printf %s%引用的字符串类型与std::string不同。

事实上,当指定printf时,std::string甚至不存在。在C ++中,您应该使用std::cout代替,它可以按预期工作:

#include <iostream>
 [...]

std::string myString("Hello World"); 
std::cout << "* Debug: " << myString << " \n";

答案 3 :(得分:0)

使用myString.c_str();您正在尝试将对象输出为字符串。 std :: string和char *

之间没有转换

答案 4 :(得分:0)

printf是一个C函数,需要一个c-string,char*,它只是指向字符串上下文所在的内存中的一个指针。它假设字符串一直到下一个'\0'字节,并将从作为指针传递到该点的地址打印内存的内容(下一个'\0')。

std::string是一个有几个成员的班级。除了实际的字符串,它还存储例如当前大小。此外,你没有传递指向字符串的指针。

如果要将std::stringprintf一起使用,则必须在字符串对象上调用c_str()方法。此方法将字符串对象的内容作为char* / c-string返回,并且在使用具有期望c字符串的c函数的字符串对象时应始终使用该方法。

printf("* Debug: %s \n", myString.c_str());