笔者在运行程序时弹出出现了一条如下警告:
warning:
cannot pass objects of non-POD type `struct std::string' through
`...'; call will abort at runtime
这是报错的代码:
fprintf(fout
,"%s\t%s\t%d\t%d\n",j -> person.name , j -> person.address ,j
-> person.phone_number ,j -> person.post_code);
后来查阅各种资料,解决办法如下:
fprintf(fout
,"%s\t%s\t%d\t%d\n",j -> person.name.c_str() , j ->
person.address.c_str() ,j -> person.phone_number ,j ->
person.post_code);
至于为什么这么改,程序就没有警告了,主要是因为:
1、这属于参数类型错误。fprintf里面需要参数是char*类型,而不是string类型。string类型是c++的STL中的类型,它用于处理字符串。C语言中使用的字符串是C风格的字符串,即末尾以’\0‘字符为结束符。
2、string类型的字符串,可以调用其成员函数c_str(),来将string类型的对象转成C风格的字符串。这样就可以在printf后面输出string类型的变量了。
#include
#include
using
namespace std;
main()
string a=
"hello world"; //string对象
cout<<a<<endl;
//C++的常规输出
printf(a.c_str());
//C风格的输出