混淆C的fwrite函数的参数
Confusion with the parameters of C's fwrite function
我现在正在学习C语言。我在 tutorialspoint.com 中遇到了 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)
该网站中的每个功能都有一些示例。至于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?
1
是 sizeof( 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所述,如果无法从文件中读取元素的个数,则会有所不同。
给出的示例在正常情况下有效,但应更正为 size
和 count
和 fread
提供正确的值
fread(buffer, 1, strlen(c)+1, fp);
阅读,例如this fread
reference, or this fread
POSIX specification 告诉我们 size
参数是每个 元素的大小 (例如 sizeof(some_type)
),而 nmemb
是 number 个要读取的元素(例如 strlen(some_string)
)。 fwrite
当然也是如此。
虽然在大多数情况下,切换传递的值的位置并不重要,如果一切正常,那么 size * nmemb
字节将被读取(或写入)。当读取或写入文件出错时就会出现问题,因此最好尝试记住哪个参数是哪个。
我现在正在学习C语言。我在 tutorialspoint.com 中遇到了 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)
该网站中的每个功能都有一些示例。至于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?
1
是 sizeof( 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所述,如果无法从文件中读取元素的个数,则会有所不同。
给出的示例在正常情况下有效,但应更正为 size
和 count
和 fread
fread(buffer, 1, strlen(c)+1, fp);
阅读,例如this fread
reference, or this fread
POSIX specification 告诉我们 size
参数是每个 元素的大小 (例如 sizeof(some_type)
),而 nmemb
是 number 个要读取的元素(例如 strlen(some_string)
)。 fwrite
当然也是如此。
虽然在大多数情况下,切换传递的值的位置并不重要,如果一切正常,那么 size * nmemb
字节将被读取(或写入)。当读取或写入文件出错时就会出现问题,因此最好尝试记住哪个参数是哪个。