-3
#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

4

4 回答 4

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 函数一起使用。

于 2013-08-12T18:41:30.637 回答
1

c_str()。必须使用此功能使用样式字符串..

于 2013-08-12T18:41:28.527 回答
1

printf() 处理 c 字符串 (char *),您使用的是 c++ 风格的字符串,因此需要在它们之间进行转换。

只需像这样使用 c_str() 方法

printf("%s", str.c_str());
于 2013-08-12T18:43:04.483 回答
0

printfs%s格式说明符期望 C 样式字符串不是 a std::string,因此您需要使用c_str()which return a const char*

printf("\n--------%s--------\n", str.c_str());

基本上你有未定义的行为,因为printf会尝试访问你的参数,就好像它是一个指向空终止的 C 样式字符串的指针。虽然,因为这是 C++,所以你应该使用std::cout更安全。

于 2013-08-12T18:42:20.423 回答