MSVC++2008 win7与xp之间的文本文件解析差异 工作环境 Windows 7 Ultimate X64 SP1 微软Visual Studio 2008 SP1 C++ 文本文件

MSVC++2008 win7与xp之间的文本文件解析差异 工作环境 Windows 7 Ultimate X64 SP1 微软Visual Studio 2008 SP1 C++ 文本文件,c++,windows,visual-studio,text,fopen,C++,Windows,Visual Studio,Text,Fopen,我的程序正在解析纯文本文件并运行。下一个代码是该文本文件 /*main.txt*/ _function main() { a = 3; //a is 3 b = "three"; c = 4.3; //automatic typecast _outd(b+"3\n"); _outd(b+a+c); d = a/c; _outd("\n"+d+"\n&qu

我的程序正在解析纯文本文件并运行。下一个代码是该文本文件

/*main.txt*/

_function main()
{
    a = 3;      //a is 3
    b = "three";
    c = 4.3;    //automatic typecast
    _outd(b+"3\n");
    _outd(b+a+c);
    d = a/c;
    _outd("\n"+d+"\n"); ///test commantation
    /*//
    comment
    */
}
这是一种简单的c-Style脚本,可在记事本等文本编辑器中编辑。此文本中的内容并不重要

密码 文本打开代码

std::wstring wsFileName; //from 

char* sz_FileName = new char[wsFileName.size()+1];
ZeroMemory(sz_FileName,sizeof(char)*(wsFileName.size()+1));

//////////////////////////////////////////////////////////////////////////
//for using 'fopen', change wsFileName to ascii
WideCharToMultiByte(CP_UTF8,0,wsFileName.c_str(),-1,sz_FileName,wsFileName.size(),NULL,NULL);

//open ascii text file
FILE* fp=fopen(sz_FileName,"rt");

std::string ch;
while(!feof(fp))
{
     ch.push_back(fgetc(fp));   //get textfile in ascii
}
问题 在调试器中监视std::string ch:

这与我在Windows7中预期的结果完全相同。发布的执行文件也可以正常工作。但在WindowsXPSP3中,它会调用运行时错误

我挖了整整一夜,终于找到了它。我在WindowsXPSP3上安装并调试了VisualStudio2008SP1

监视std::string ch:

我猜新行标记是该程序在WindowsXP中崩溃的原因。我猜这个基于问题的“Windows7和WindowsXP之间的文本编码”。因此,我使用WindowsXP的记事本制作了新的脚本文本。并尝试解析它。但是WindowsXP也有同样的问题。我知道:问题不仅发生在源于windows 7的文本文件上,而且还发生在windows xp中新生成的文本上。我不知道为什么会出现这个问题

问题 由记事本、editplus、ultraedit和其他程序生成的纯文本文件。。。这就产生了任何WindowsOSXP&vista&7,我的程序怎么能读取相同结果的文本? 我希望每个用户都可以编辑脚本,使用自己的简单文本编辑器,在自己的操作系统中控制和自定义我的程序。

如果字符包含不需要的字符,为什么不在添加到字符串之前测试该字符?例如,类似于:

char temp;
while(...)
{
  temp = fgetc(fp);
  if (temp != "\r")
    ch.push_back(temp);
}

我还没有测试代码,但是如果确实是错误的字符,那么它应该可以工作。

-1那篇文章非常不可读。请把它修好;我已经做了一些工作。标题也需要调整。谢谢你注意如何写标题。和a,b,c。。不是一个C++源代码。这是我的程序的自定义脚本。本文的主要问题是“文本解析”。脚本文本的内容不是一个重要的部分。@Spo1ler否,这取决于ch的日化方式。因为这不是问题的一部分,所以我没有回答。为了避免内存重新分配,只需使用ch.reservefilesize设置字符串大小,就可以通过几种不同的方法获得文件大小。由于在问题中使用了类似的方法,并且没有显示ch的声明,我只是假设这已经完成。