[英]What do all the parameters in fread and fwrite stand for?
我开始使用fread
和fwrite
来通过 tcp 连接发送文件,我想知道函数的参数代表什么。 我试过阅读文档,但我不明白第二个参数(大小)和第三个参数(nmemb)之间的区别。 谁能描述每个参数的用途以及上述两个参数之间的区别? 谢谢。
谁能描述...上面提到的两个参数之间的区别?
size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);
size
是正在读取的单个元素的大小。 例如,当读取double
精度时,大小将是sizeof(double)
或通常为 8。
nmemb
是要读取的最大元素数。
重要的是,返回值是读取的元素数,不一定是读取的字节数。
谁能描述每个参数的目的......?
ptr
是 memory 中开始保存数据的位置。
stream
是读取时使用的FILE *
指针,通常是fopen()
的结果。
示例使用
FILE *inf = fopen("data.bin", "rb");
if (inf) {
double data[N];
size_t n;
while ((n = fread(data, sizeof data[0], N, inf)) > 0) {
printf("Read %zu doubles, first one %g\n", n, data[0]);
}
fclose(inf);
}
在<stdio.h>
(此处的文档)中定义的fread
和fwrite
具有以下签名:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *" stream );
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr
,其中包含必须复制数据的起始地址( fread
)或从哪里复制( fwrite
) 他们都应该复制每个size
字节的nmemb
元素。 S 例如,如果您要复制 100 个字符的缓冲区
fread(ptr, 1, 100, 文件指针);
因为char
的大小是 1。在一般情况下,您要复制myType
类型的 N 个元素
fread( ptr, sizeof(myType), N, filePointer );
在这种情况下,将读取全部sizeof(myType) * N
个字节。
它们需要通过成功调用fopen
function(在此处描述)获得的指向文件 ( FILE *
) 的有效指针。
谈到它们的返回值,没有比链接文档中包含的描述更好的描述了:
成功时,
fread()
和fwrite()
返回读取或写入的项目数。 此数字等于仅当 size 为 1 时传输的字节数。如果发生错误或到达文件末尾,则返回值是一个短项计数(或零)。
因此,成功时,它最多会返回nmemb
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.