fread string的问题
请教各位高手一个问题:
下面两个程序的的作用是将一个pair写入文件,然后再读出来。第一个程序运行完,myPair为("orange",1);
第二个运行完为("apple",1)。也就是说,第一个程序并没有把文件中读出的值赋给myPair。
我对string在或者含string的pair在文件中的存储方式有些疑惑。string对象的大小恒定为28个字节(VS2012),程序可以根据指针去找string.pointer去找到对应的字符串。
但是,将string或者上述定义的pair存到文件的时候,到底是一种什么样的存储方法呢?string对应的字符串的长度也不一致。
另外,当从文件中读取存储的pair数据时,当Key为string的时候,会遇到这种情况:
文件读取,从文件中读取数据的使用都正常,但是当函数退出的时候,出现错误。错误的提示为:
0x545CCCC8 (msvcp110d.dll) (TradeAnalyzer.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x0065CEA4 时发生访问冲突。
中断处为xstring,
void _Free_proxy()
{// destroy proxy
typename _Alloc::template rebind<_Container_proxy>::other
_Alproxy;
this->_Orphan_all();
_Alproxy.destroy(this->_Myproxy);
_Alproxy.deallocate(this->_Myproxy, 1);
this->_Myproxy = 0;
}
请问各位这两个问题:
1. string在文件中的存储;
2.上述错误的原因,和解决方法?
分数不多,字数不少,望各位见谅,多多指教。
程序一
FILE * fp;
pair<string,int> myPair("appleappleappleappleappleappleappleappleappleappleapple",1);
printf("%d\n",sizeof(myPair));
if(fopen_s(&fp,"test.txt","wb")!=0)
{
printf("Open file error!\n");
exit(-1);
}
fwrite(&myPair,sizeof(pair<string,int>),1,fp);
fclose(fp);
myPair = make_pair("orange",1);
if(fopen_s(&fp,"test.txt","rb")!=0)
{
printf("Open file error!\n");
exit(-1);
}
fread(&myPair,sizeof(pair<string,int>),1,fp);
fclose(fp);
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
程序二
FILE * fp;
pair<string,int> myPair("apple",1);
printf("%d\n",sizeof(myPair));
if(fopen_s(&fp,"test.txt","wb")!=0)
{
printf("Open file error!\n");
exit(-1);
}
fwrite(&myPair,sizeof(pair<string,int>),1,fp);
fclose(fp);
myPair = make_pair("orange",1);
if(fopen_s(&fp,"test.txt","rb")!=0)
{
printf("Open file error!\n");
exit(-1);
}
fread(&myPair,sizeof(pair<string,int>),1,fp);
fclose(fp); String 存储
------解决方案--------------------
更正一下,上面的程序,读二进制的部分效率低,重新写了一个