1

我正在用 C 语言编程,但遇到以下问题:

我使用 fopen 并尝试从 csv 文件中读取,该文件当前存储在程序的 exe 文件的文件夹中。

该程序在调试模式和发布模式下运行良好,但是当我尝试在 Visual Studio 2008 Express Edition 上以“不调试启动”模式运行该程序时,该程序停止工作并且 Windows 显示一条消息:“ * .exe 已停止工作. 一个程序导致程序停止正常工作。Windows 将关闭该程序并通知您是否有可用的解决方案”。

我试过在几台电脑上运行这个程序,结果都是一样的。

我可以给你的另一个信息是,如果我输入文件的完整路径(C:....file.csv) - 那么它工作得很好,没有任何问题。

我知道我没有编写任何代码,但我希望有人知道为什么会发生这种情况。

谢谢提前。

4

1 回答 1

4

您的程序没有找到 csv 文件,fopen()失败并返回一个空指针,您尝试使用它而不检查并且您的程序崩溃(只是我的猜测)。

首先,您必须检查是否fopen()确实可以打开您的文件:

FILE* f = fopen("file.csv", "r");
if(f == NULL) {
  /* print some meaningful error */
} else {
  /* use the file */
}

其次,您可以通过从文件所在的同一文件夹中执行程序来解决问题。我不是 Windows 人,但如果您创建指向“.exe”的链接,则其属性中可能有一些名为“工作目录”或类似的配置,您可以将其设置为文件所在的路径成立。

每个进程都有一个工作目录,通常是它启动的目录,尽管它可能是从父进程继承的,并且可以通过编程方式进行更改。如果您在加载文件时没有指定完整路径,则该进程将在其当前工作目录中搜索该文件。

于 2012-06-26T21:05:39.337 回答