gpt4 book ai didi

c - fread() 在 C 中的返回值

转载 作者:太空狗 更新时间:2023-10-29 16:52:41 30 4
gpt4 key购买 nike

我正在尝试了解 fread() 是如何实现的在 <stdio.h> 中发挥作用有效,我对此函数的返回值感到困惑。在手册页中它说

RETURN VALUE
On success, fread() and fwrite() return the number of items read or written. This number equals the number of bytes transferred only when size is 1. If an error occurs, or the end of the file is reached, the return value is a short item count (or zero).

fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred.

谁能给我解释一下 number of items read or written 是什么意思在这种情况下。还有谁能给我提供一些示例返回值及其含义吗?

最佳答案

fread() 将从提供的 IO 流(FILE* 流)。它返回从流中成功读取的项目数。如果它返回的数字小于请求的项目数,则 IO 流可以被认为是空的(或以其他方式损坏)。

读取的字节数将等于成功读取的项目数 乘以提供的项目大小

考虑以下程序。

#include <stdio.h>

int main() {
char buf[8];
size_t ret = fread(buf, sizeof(*buf), sizeof(buf)/sizeof(*buf), stdin);
printf("read %zu bytes\n", ret*sizeof(*buf));
return 0;
}

当我们运行这个程序时,根据提供的输入量,可以观察到不同的结果。

我们根本无法提供任何输入。 IO 流以 (EOF) 开头为空。返回值将为零。没有项目被阅读。返回零。

$ : | ./a.out
read 0 bytes

我们根据要求提供较少的输入。在遇到 EOF 之前将读取某些项目。返回读取的项目数。没有更多项目可用。此后流为空。

$ echo "Hello" | ./a.out
read 6 bytes

我们会根据要求提供相等或更多的输入。将返回请求的项目数。可能有更多项目可用。

$ echo "Hello World" | ./a.out
read 8 bytes

相关阅读:

当流中的字节数少于构成项目的字节数时,从流中消耗的字节数可能会大于计算的读取字节数通过以上公式。我发现对上述链接问题(及其评论)的回答在这件事上特别有见地:

关于c - fread() 在 C 中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28398255/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com