c++的string类不会用,感觉像鸡肋
- C/C++ code
#define Size 100string Items[Size];void AppInit(){ FILE *ItemsToExecute=fopen("ItemsToExecute.txt","r"); if(ItemsToExecute==NULL) ItemsToExecute=fopen("ItemsToExecute.txt","w+"); else return; /*cout<<"请设置文件列表大小"<<endl; cin>>Size;*/ cout<<"请输入您想要列入切换列表的服务名称(以回车键隔开,输入‘end’结束录入):"<<endl; int i=0; do { cin>>Items[i]; //全局变量 if(i==0) fwrite(Items[i].c_str(),sizeof(Items[i])+1,1,ItemsToExecute); else { fwrite("\n",sizeof("\n"),1,ItemsToExecute); fwrite(Items[i].c_str(),sizeof(Items[i])+1,1,ItemsToExecute); } //测试代码 printf("items %d, size:%d",i,sizeof(Items[i])); // 大小始终为32字节 printf("int size:%d",sizeof(int)); // 大小为4字节 printf("char size:%d",sizeof(char)); i++; }while(i<Size&&strcmp(Items[i].c_str(),"end")!=0); fclose(ItemsToExecute);}平时用的都是mfc的CString,今天写个自己用的管理系统服务小程序,结果发现标准c++的string 类真难用,写到文件ItemsToExecute.txt中的类容的每一行末尾总有乱码,真心感觉不如CString 好用。求大侠指教
[解决办法]
那是因为你写入的是
fwrite(Items[i].c_str(),sizeof(Items[i])+1,1,ItemsToExecute);
这样写肯定是不对的。items作为一个对象,里面肯定有其它的数据的,你写入文件后乱码就对了,不乱码才不对呢。你需要写入的是字符串,那你就获得items[i]的长度不就可以了么??
[解决办法]
配合 fstream 使用就会舒服点了吧,强行搭配 fwrite 的话,感觉确实比较鸡肋。
[解决办法]
string对象中字符串的长度不能用“sizeof(Items[i])”来求,应该这样调用string的成员函数size来求。
Items[i].size();
[解决办法]
从通用性角度来说,std::string要比CString好很多,std::string要比CString强大。
但我觉得也许是STL的设计人员对使用者的估计比较高,因此,一些常用的方法,比如trim等,string都不提供,而需要你自己做一些简单的封装。
如果确认运行环境是Windows,我个人喜欢使用CString,这样在调用一些FOR WIN的东西时,比如COM等等,会方便很多。
[解决办法]
建议你使用fstream来进行文本的输入输出。
[解决办法]
关键的错误在这里:
- C/C++ code
fwrite(Items[i].c_str(),sizeof(Items[i])+1,1,ItemsToExecute);