添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
笔者在运行程序时弹出出现了一条如下警告:
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风格的输出