【发布时间】:2011-12-20 03:48:55
【问题描述】:
工作环境
- Windows 7 Ultimate X64 SP1
- Microsoft Visual Studio 2008 SP1 (C++)
文本文件
我的程序正在解析纯文本文件并运行。下一个代码是那个文本文件。
/*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 样式脚本,可在记事本等文本编辑器中编辑。(此文本中的内容不重要)
代码
文本打开代码。
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:
这与我在 Windows 7 中的预期结果完全相同。发布的执行文件也可以正常工作。但在 Windows XP SP3 中,它会调用运行时错误。
我挖了一个晚上,终于找到了。我在windows xp sp3上安装了visual studio 2008 sp1并进行了调试。
关注std::string ch:
我猜“换行符”是该程序在 windows xp 中崩溃的原因。我猜到这个问题基于'windows 7和windows xp之间的文本编码'。所以我使用 windows xp 的记事本制作新的脚本文本。并尝试解析它。但是windows xp也有同样的问题。我知道:这个问题不仅出现在 windows 7 的文本文件中,而且还出现在 windows xp 中新生成的文本中。我不知道为什么会出现问题。
问题
一个纯文本文件(由记事本、editplus、ultraedit 和其他...生成)生成任何 Windows 操作系统(xp 和 vista 和 7),我的程序如何读取相同的文本结果?
我希望每个用户都可以使用他们自己的简单文本编辑器编辑脚本以在他们自己的操作系统中控制和自定义我的程序。
【问题讨论】:
-
-1 那篇文章非常难以阅读。请修复它;我已经完成了一些工作。标题也需要调整。
-
感谢您注意如何编写标题。并且 a, b, c.. 不是 c++ 源代码。它是我的程序的自定义脚本。本文的主要问题是“文本解析”。脚本文本的内容不是重要的部分。
标签: c++ windows visual-studio text fopen