LPCSTR  str2; 
float a,b;
CStdioFile  file1,file2;
CString str,str1;
if(!file1.Open(m_fileFolder1,CStdioFile::modeRead))
{
::AfxMessageBox(_T("不能打开文件!"));
return;
}
file2.Open(m_fileFolder2,CStdioFile::modeCreate | CStdioFile::modeWrite);
int len;
while(file1.ReadString(str))   
{
len=str.GetLength();
USES_CONVERSION;
str2=W2A(str.GetBuffer(len));
str.ReleaseBuffer();
sscanf_s(str2,"%f %f",&a,&b);
str1.Format(_T("%.3f,%.3f\n"),a,b);
file2.WriteString(str1);
}
数据格式
   900.000    123.146 
   900.125    123.146 
   900.250    123.146 
   900.375    123.146 
   900.500    123.146 
……
这个问题折腾了两天了,没找到答案,上网求助一下。读入一个文本文档数据,当数据量小的时候没有问题,当数据量稍大些时(12000行左右),就在ReadString(str)这一行出错了,提示是访问冲突,我用的版本是VS2005
哪儿大侠帮忙解决一下。

解决方案 »

  1.   

    我发现经常有人把字符串处理搞复杂化,如果你的文件是UNICODE编码的,就直接用Unicode版本的函数处理,何必转换为ASCII?如果不是UNICODE的,又为什么要转换?所以对你这个W2A的用法认为根本没有必要,无端增加程序复杂性的后果除了降低效率,也增加了发生错误的机会。
      

  2.   

    可以试一下这个Unicode字符转换成ASCII字符函数: WideCharToMultiByte();
    我网络课程设计的时候,因为VS2005 使用Unicode字符集的原因弄了好久....
    刚开始时用GetBuffer()不可以;最好用这个函数解决了
    CString sendString = _T("昆");
    char str[256] = "";
    WideCharToMultiByte( CP_OEMCP, NULL, sendString, -1, str, 256, NULL, FALSE );
      

  3.   

    我的文件是UNICODE编码,但我搞不清,哪些函数是UNICODE函数,哪些是非UNICODE函数。一个程序中总是两种函数都有。那请教一下,如果全部用是UNICODE函数,怎么实现呢?
      

  4.   

    WideCharToMultiByte( CP_OEMCP, NULL, sendString, -1, str, 256, NULL, FALSE ); 
    这种方法确实可以解决问题,但我没搞明白GetBuffer有什么问题
      

  5.   

    为什么不用 CArchive  了 ???    真的费解了  !!