休息几年后,我需要使用 C++ 进行开发。无论如何,按照我目前正在阅读的教程,我遇到了问题。编写以下代码片段后,我希望在控制台中看到“Hello World”,但我只能看到“Debug: StrangeChars”;什么地方出了错?
std::string myString("Hello World");
printf("* Debug: %s \n", myString);
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;
尝试
printf("* Debug %s \n", myString.c_str());
或者更好:
std::cout << "* Debug " << mystring << std::endl;
printf
's引用的字符串类型%s%
与std::string
.
事实上,何时printf
被指定,std::string
甚至不存在。在 C++ 中,您应该std::cout
改用它,它按预期工作:
#include <iostream>
[...]
std::string myString("Hello World");
std::cout << "* Debug: " << myString << " \n";
使用 myString.c_str(); 您正在尝试将对象输出为字符串。std::string 和 char * 之间没有转换
printf
是一个 C 函数,需要一个 c 字符串,achar*
只是一个指针,指向字符串上下文所在的内存位置。它假定字符串一直到下一个'\0'
字节,并将从作为指针传递到该点的地址(下一个 ' \0'
)打印内存的内容。
std::string
是一个有几个成员的类。除了实际的字符串之外,它还存储例如当前大小。此外,您没有传递指向字符串的指针。
如果要使用std::string
with printf
,则必须调用c_str()
字符串对象上的方法。此方法将字符串对象的内容作为char*
/c-string 返回,并且应始终在使用带有期望 c-strings 的 c-function 的字符串对象时使用。
printf("* Debug: %s \n", myString.c_str());