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的声明,我只是假设这已经完成。