混淆C的fwrite函数的参数

Confusion with the parameters of C's fwrite function

我现在正在学习C语言。我在 tutorialspoint.com 中遇到了 freadfwrite 函数。基本上,这两个函数的声明有点相同:

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)

该网站中的每个功能都有一些示例。至于fwrite函数:

fwrite(str , 1 , sizeof(str) , fp );

我完全可以理解这一点。但是对于 fread 函数:

fread(buffer, strlen(c)+1, 1, fp);

为什么 1 参数出现在 strlen(c)+1 参数之后?这是某种错误还是我应该知道什么?

提前致谢。

Why the 1 argument come before the sizeof(str) argument?

1sizeof( char )

fwrite最好写成:

fwrite(str , sizeof(char) , sizeof(str) , fp );

来自here

Size - Size in bytes of each element to be written. size_t is an unsigned integral type.

Count - Number of elements, each one with a size of size bytes. size_t is an unsigned integral type.

尺寸和数量可以互换,正常情况下不会有任何区别。如2501所述,如果无法从文件中读取元素的个数,则会有所不同。

给出的示例在正常情况下有效,但应更正为 sizecountfread

提供正确的值
fread(buffer, 1, strlen(c)+1, fp);

阅读,例如this fread reference, or this fread POSIX specification 告诉我们 size 参数是每个 元素的大小 (例如 sizeof(some_type)),而 nmembnumber 个要读取的元素(例如 strlen(some_string))。 fwrite 当然也是如此。

虽然在大多数情况下,切换传递的值的位置并不重要,如果一切正常,那么 size * nmemb 字节将被读取(或写入)。当读取或写入文件出错时就会出现问题,因此最好尝试记住哪个参数是哪个。