fread和fwrite中的参数都代表什么?

问题描述 投票:0回答:1

我开始使用 freadfwrite 为了通过tcp连接发送文件,我想知道这些函数的参数代表什么。我试着阅读了文档,但我不明白第二个参数(size)和第三个参数(nmemb)之间的区别。谁能描述一下每个参数的用途,以及上述两个参数之间的区别?谢谢,我开始使用fread和fwrite。

c fwrite fread
1个回答
2
投票

谁能描述一下......上面提到的两个参数之间的区别?

size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);

size 是指被读取的单个元素的大小。 例如:当读取一个 double 大小将是 sizeof(double) 或通常为8。

nmemb 是读取的最大元素数。

重要的是,返回值是读取的元素数,而不一定是读取的字节数。


谁能描述一下每个参数的用途......?

ptr 是内存中开始保存数据的位置。

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);
} 

1
投票

freadfwrite,定义在 <stdio.h> (文件 此处)有如下签名。

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);
  1. 它们都需要一个指向缓冲区的指针。ptr,其中包含要复制数据的起始地址(fread)或从哪里复制(fwrite)
  2. 他们两个都应该是抄袭 nmemb 元素 size 字节。例如,如果您要复制一个100个字符的缓冲区

    fread( ptr, 1, 100, filePointer )。

因为一个 char 是1.在一般情况下,你要复制N个类型的元素。myType

 fread( ptr, sizeof(myType), N, filePointer );

在这种情况下,完全 sizeof(myType) * N 字节将被读取。

  1. 它们需要一个有效的文件指针(FILE *)获得的 成功 召唤 fopen 功能 此处).

  2. 谈到它们的返回值,a不能写出比链接文档中包含的更好的描述。

关于成功: fread()fwrite() 归还 物品 读或写。只有当大小为1时,这个数字才等于传输的字节数,如果发生错误,或者到了文件的终点,返回值就是一个短项计数(或者零)。

所以,在成功时,它最多返回的是 nmemb.

© www.soinside.com 2019 - 2024. All rights reserved.