c - 处理 "start without debugging"上的文件

标签 c

我正在用 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/

相关文章:

c - 将 "complex"结构写入 FIFO

c - C 中的 .p 文件是什么?

c - 具有不同大小成员的 union 数组

c - C 中 CHAR * 的位运算

c - 用于访问结构中元素的指针操作

c - 当分隔符为字符串时,使用strtok()

c - 我的文件指针设置错了吗?

java - 跨编程语言的动态内存分配

c - FreeImage 包含在 c 中

c - 使用 `madvise` 将大内存映射归零