加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于warning: cannot pass objects of non-POD的解决办法(C++)

(2015-12-03 20:38:37)
标签:

it

c

警告

printf

string

分类: C_plus_plus
版权说明:未经许可,不得转载。
著作权归博主所有。
本博客一切解释权归博主所有。  
笔者在运行程序时弹出出现了一条如下警告:
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;
 
int main()
{
string a= "hello world"; //string对象
cout<<a<<endl; //C++的常规输出
printf(a.c_str()); //C风格的输出
return 0;
}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有