也许我只是有另一个黑色但是,这一行给了我很多麻烦:
FILE *fp = fopen("data/world.data", "rb");
在使用GCC编译时,在Linux下运行正常。但是当我使用Visual Studio编译它时,它会崩溃。 fp总是NULL
。 BIN和EXE都在完全相同的目录中。现在,为了让事情变得更加疯狂,当我在Linux下使用Wine运行EXE时...它......有效......
我绝对不知道这里发生了什么。也许这是我身上一些疯狂的愚蠢错误,但我不能在Windows下运行这个东西:/
另外,我还有另一个工作正常的程序,数据文件也包含在名为data的子目录中。
修改:
为了清楚说明,/
NOR `\ *都不起作用。
编辑2:
好吧,我放弃了这个,也许有人玩得很开心,这里有包含EXE的ZIP,VS的调试数据等。:
https://dl.dropbox.com/u/2332843/Leaf.zip
编辑3:
使用CodeBlocks和MinGW编译它,就像一个魅力。猜猜它必须对MSVC或VS中的项目设置做些什么。
答案 0 :(得分:6)
当您运行程序时,data
听起来不是当前目录的子目录。默认情况下(对于x86目标),VS将从您为项目创建的基目录的DEBUG或RELEASE子目录中构建并运行程序。您可以在运行时修改将是“当前”的目录(例如,VS 2008的项目|属性|配置属性|调试)。
编辑:虽然Windows要求您在命令行使用反斜杠作为目录分隔符,但代码中的正斜杠 fine - 这是不源代码你的问题。
答案 1 :(得分:2)
在Windows中,您必须编写以下内容:
FILE *fp = fopen("data\\world.data", "rb");
这就是因为反斜杠是一个特殊字符(因此字符串中的反斜杠是使用\编写的,引号符号是\“,因此使用其他特殊字符)。
答案 2 :(得分:1)
由于此问题仅在Windows上发生。我怀疑该文件是否真的命名为“world.data”。如您所知,Windows的默认设置会隐藏文件扩展名。它的真实名称是world.data.xxx吗?
答案 3 :(得分:0)
在GetCurrentDirectory()中添加一行,以查看您是否从预期的目录运行。
当我在visual studio上使用C#/ C ++开发时,我通常会从debug文件夹中运行它。我不认为在.net中使用正斜杠代替反斜杠是否重要。
答案 4 :(得分:0)
我碰巧遇到了同样的问题,突然间我发现了它。
这应该是你的Windows错误。
让我们说,FILE *fp = fopen("data/world.data", "rb");
在windows中,如果你隐藏扩展名,那么你可以看到文件data / world.data,但实际上它可能是/data/world.dat.txt或者有些。
所以请查看扩展程序。
希望它有所帮助!
答案 5 :(得分:0)
今天我遇到了这个问题,之所以发生这种情况,是因为我在该模式参数上使用了“br”而不是“rb”。
底层的fopen抛出某种异常,只会注册为崩溃。它不需要返回标准的NULL响应或设置相关的错误值。
答案 6 :(得分:-1)
我不确定,但可能是因为你在路径中使用斜杠而不是(转义)反斜杠?