【发布时间】:2020-10-15 19:21:48
【问题描述】:
我已经写了函数,不知道它是否正确但是我如何使用if条件返回true和false?
函数 bool save_book(Book, char)** 输入参数: 指向 Book 的指针和表示文件名的字符串。 返回值:如果图书的内容成功存储到文件中,则返回 true。否则为假。 注意此函数应根据文件名创建或打开一个文件,并在其中存储书籍的每一行。
下面是我的代码
bool save_book(Book *b, char* fileName){
FILE *filePointer = fopen(fileName,"w");
for (int i = 0; i < pBook->lineCount; i++)
{
fprintf(filePointer, "%s", b->lines[i]);
}
fclose(filePointer);
return true;
}
这是我正在使用的结构:
typedef struct _Book
{
int characterCount;
int lineCount;
int maxLineCount;
char **lines;
}Book;
【问题讨论】:
-
阅读C IO functions的文档
-
检查
fopen()是否有效;检查每个fprintf()是否有效;检查fclose()是否有效。如果他们都没有报告问题,那么很有可能一切正常。 -
@JonathanLeffler 仍然可以在操作系统上进行缓存,并且当稍后对磁盘的访问失败时,缓存可能会丢失。要保存,需要同步。
-
@12431234123412341234123:是的,并且可以移除磁盘驱动器,而且……这就是为什么机会是“高”而不是“绝对”的原因。如果您使用的是文件流,那么设置相关的同步选项是很麻烦的——在 POSIX 系统上可行,在 Windows 上可能可行。同步安全也有不同级别,对系统性能有不同的影响。不过,尚不清楚描述这些细节是否会使 OP 受益。很大程度上取决于需求是什么,但对于大多数人(程序)来说,大多数时候检查 I/O 操作就足够了——但并不是对所有人都适用。
-
@shardul:在调用
fopen之后验证filePointer != NULL是最重要的检查。这样可以确保文件已成功打开。fopen也有可能成功,fprintf之后会失败,但这不太可能。因此,根据我的经验,检查fopen的返回值总是很重要,但通常不需要检查fprintf的返回值。此外,通常也不需要检查fclose。
标签: c