【发布时间】: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