“printf” on strings prints gibberish
我正在尝试通过以下方式打印字符串:
1 2 3 4 5 6
| int main(){
string s("bla");
printf("%s \
", s);
.......
} |
但我得到的只是这个乱七八糟的东西。
你能解释为什么吗?
因为%s表示char*,而不是std::string。 使用s.c_str()或更好地仍使用iostream:
1 2 3 4 5 6 7 8 9 10 11
| #include <iostream>
#include <string>
using namespace std;
int main()
{
string s("bla");
std::cout << s <<"\
";
} |
-
我已经用std :: cout尝试过了,编译器发出了一个错误:binary <<:没有找到使用std :: string类型的右侧操作数的运算符
-
那很奇怪。这是哪个C ++实现?
-
Ive修改了代码,使其具有独立性和可编译性(并经过测试)。
您需要使用c_str来获得与字符串内容等效的c字符串,因为printf不知道如何打印字符串对象。
1 2 3
| string s("bla");
printf("%s \
", s.c_str()); |
相反,您可以执行以下操作:
1 2
| string s("bla");
std::cout<<s; |
-
谢谢...顺便说一句-为什么呢? printf不知道如何处理字符串?我可以使用另一种方法吗?
-
我已经用std :: cout尝试过了,编译器发出了一个错误:binary <<:没有找到使用std :: string类型的右侧操作数的运算符
-
printf不知道如何处理c ++ std :: string s,它适用于c字符串(带有\ 0的char数组以标记字符串的结尾),请注意,由于向后兼容c ++ c ++字符串文字,即" bla"代替字符串s(" bla")的是c字符串,而不是c ++ std :: string类的对象。
-
哦,好的,这很有意义:)谢谢。
当我从以下位置切换时,我已经成功地使用" cout"打印了字符串:
至
我希望我能理解为什么如此重要...
-
从include到include你什么意思 ?
-
答案来源包括Markdown删除的数据。 (顺便说一句,@ lazygoldenpanda,请不要发布对原始问题应做评论或编辑的问题的答案。)
-
string.h是标准的C标头。大多数C ++标准库项目的标头都没有.h要访问C ++代码中的标准C标头,应在c前面加上前缀。例如而不是。这是C ++标准组织试图避免C和C ++之间发生冲突的意图。
你为什么不只用