#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char a[10] = "asd asd";
char b[10] ="bsd bsd";
string str(a);
str.append(b);
printf("\n--------%s--------\n", str);
return 0;
}
我无法理解为什么会产生异常?该程序主要尝试追加字符串。我在使用std::cout
时获得了所需的输出,但在使用printf
时却没有。
答案 0 :(得分:4)
因为std::string
与char const *
不同,这是%s
格式指定的内容。您需要使用c_str()
方法返回printf()
所需的指针:
printf("\n--------%s--------\n", str.c_str());
为了更具技术性,printf()
是从C世界导入的函数,它需要一个“C风格的字符串”(指向由空字符终止的字符序列的指针)。 std::string::c_str()
返回这样的指针,以便C ++字符串可以与现有的C函数一起使用。
答案 1 :(得分:1)
c_str()。必须使用此函数使用样式字符串..
答案 2 :(得分:1)
printf()处理c字符串(char *),你使用的是c ++样式的字符串,因此需要在它们之间进行转换。
只需使用c_str()方法,如此
printf("%s", str.c_str());
答案 3 :(得分:0)
printf
s %s
格式说明符期望C样式字符串不是std::string
,因此您需要使用返回const char*
的{{3}}:< / p>
printf("\n--------%s--------\n", str.c_str());
基本上你有c_str()
,因为printf
会尝试访问你的参数,好像它是一个指向空终止的C样式字符串的指针。虽然,因为这是C ++,所以你应该使用std::cout
更安全。