读书人

c++的string类不会用感觉像鸡肋,该怎

发布时间: 2012-06-01 16:46:36 作者: rapoo

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); 

读书人网 >C++

热点推荐