我需要在几年后用C ++开发。无论如何,我在阅读我正在阅读的教程后遇到了问题。在编写下面的代码片段后,我希望在我的控制台中看到“Hello World”,但我只能看到'Debug:StrangeChars';什么地方出了错?
std::string myString("Hello World");
printf("* Debug: %s \n", myString);
答案 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::string
与printf
一起使用,则必须在字符串对象上调用c_str()
方法。此方法将字符串对象的内容作为char*
/ c-string返回,并且在使用具有期望c字符串的c函数的字符串对象时应始终使用该方法。
printf("* Debug: %s \n", myString.c_str());