3

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

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

5 回答 5

16

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;
于 2013-09-16T10:20:53.973 回答
3

尝试

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

或者更好:

std::cout << "* Debug " << mystring << std::endl;
于 2013-09-16T10:22:36.567 回答
1

printf's引用的字符串类型%s%std::string.

事实上,何时printf被指定,std::string甚至不存在。在 C++ 中,您应该std::cout改用它,它按预期工作:

#include <iostream>
 [...]

std::string myString("Hello World"); 
std::cout << "* Debug: " << myString << " \n";
于 2013-09-16T10:23:03.213 回答
0

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

于 2013-09-16T10:21:53.523 回答
0

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

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

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

printf("* Debug: %s \n", myString.c_str());
于 2013-09-16T10:28:32.093 回答