【问题标题】:C stdlib fopen cannot find files when passing file name as a variable将文件名作为变量传递时,C stdlib fopen 找不到文件
【发布时间】:2020-04-18 00:07:35
【问题描述】:

我正在读取用户输入并获取正确的字符串,但是当我尝试将相同的字符串传递给 fopen 时,它无法找到该文件。

当我将文件名作为字符串硬编码到函数调用中时,它可以正常工作,但是使用任何文件写入函数时也会出现某种错误。

说实话,感觉没什么用。我已经尝试了完整的文件路径,将文件移动到运行目录并重新打开 Visual Studio。这两个问题仍然存在。

我能否以某种方式确保我的 stdlib 没有损坏或其他什么?

编辑: 感谢您的帮助,现在可以正确解析文件名!

我仍然有以下问题:

struct time {
    char* desc;
    int month;
    int day;
    int hour;
};

void saveToFile(unsigned int count, struct time** reservations) {
    char* file = strtok(NULL, " ");
    char* clean = calloc(strlen(file), sizeof(char));
    if (clean != NULL) {
        strncpy(clean, file, strlen(file) - 1);
        FILE* writeTo = fopen(clean, "w");
        if (writeTo != NULL) {
            for (unsigned int i = 0; i < count; i++) {
                char s[80] = { 0 };
                sprintf(s, "A %s %d %d %d\n", reservations[i]->desc, reservations[i]->month,
                    reservations[i]->day, reservations[i]->hour);
                printf("%s", s);
                fprintf(writeTo, "A %s %d %d %d", reservations[i]->desc, reservations[i]->month,
                    reservations[i]->day, reservations[i]->hour);
            }
            if (ferror) printf("An error occurred while saving the data...\n");
            else printf("The calendar has successfully been saved to \"%s\"\n", clean);
            fclose(writeTo);
        }
        else printf("Could not find file...");
    }
}

现在运行此代码看似正确地写入文件,但设置了 ferror 标志,我得到相应的打印。 ERRNO 为 0。我该如何寻找原因?

【问题讨论】:

  • 您最好粘贴失败的代码。
  • 现在不能。
  • 好吧,这个问题在你回答之前可能不会得到答案——同时人们可能会投反对票,所以你可能想暂时删除它,并在输入代码后取消删除。还包括您使用的输入,以及您得到的错误的准确描述。
  • 我现在就告诉你,它不会是一个损坏的标准库。 select isn't broken
  • 你如何阅读“正确的字符串”?是fgets()吗?您是否记得删除行尾(CRLF,尽管您应该只看到一个换行符,又名 LF)?你如何证明你有正确的字符串?我推荐printf("filename: [[%s]]\n", filename); 之类的东西(如果您愿意,可以使用不同的字符代替括号)。文件名前后的已知字符很重要;它们对于发现文件名中仍然存在 CR 等问题非常有帮助。

标签: c windows visual-studio


【解决方案1】:

您的 stdlib 不太可能损坏,您必须向我们展示您的代码,以便我们找到错误。

也许您在输入的末尾有一个 \n。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多