我正在用 C 编程,并且 我有以下问题:
我使用 fopen 并尝试从一个 csv 文件中读取,该文件当前存储在程序的 exe 文件的文件夹中。
该程序在 Debug模式和 Release模式下运行良好,但是当我尝试在 visual studio 2008 Express Edition 上以“不调试启动”方式运行程序时,程序停止运行并且 Windows 显示一条消息:“ *.exe 已停止工作。某个程序导致该程序停止正常工作。windows 将关闭该程序并在有可用解决方案时通知您。
我试过在几台电脑上运行这个程序,都是一样的。
我可以给你的另一个信息是,如果我输入文件的完整路径 (C:....file.csv) - 那么它就可以正常工作,没有任何问题。
我知道我没有写任何代码,但我希望有人知道为什么会发生这种情况。
提前致谢
最佳答案
您的程序没有找到 csv 文件,fopen()
失败并返回一个空指针,您尝试在不检查的情况下使用它并且您的程序崩溃了(这只是我的猜测)。
首先,您必须检查 fopen()
是否确实可以打开您的文件:
FILE* f = fopen("file.csv", "r");
if(f == NULL) {
/* print some meaningful error */
} else {
/* use the file */
}
其次,您可以通过从文件所在的同一文件夹执行您的程序来解决问题。我不是 Windows 用户,但如果你创建一个指向“.exe”的链接,在它的属性中可能有一些名为“工作目录”或类似的配置,你可以将其设置为文件所在的路径找到了。
每个进程都有一个工作目录,通常是它启动的目录,尽管它可能是从父进程继承的,并且可以通过编程方式更改。如果您在加载文件时没有指定完整路径,该进程将在其当前工作目录中搜索该文件。
关于c - 处理 "start without debugging"上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215883/