我现在正在学习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
参数之后?这是某种错误还是我应该知道的?
提前致谢。
答案 0 :(得分:2)
为什么1参数出现在sizeof(str)参数之前?
1
是sizeof( char )
fwrite
最好写成:
fwrite(str , sizeof(char) , sizeof(str) , fp );
答案 1 :(得分:2)
阅读例如this fread
reference或this fread
POSIX specification告诉我们size
参数是每个元素的大小(例如sizeof(some_type)
),而nmemb
是要读取的元素的数字(例如strlen(some_string)
)。当然fwrite
也是如此。
在大多数情况下,切换传递的值的位置并不重要,如果一切正常,那么size * nmemb
字节将被读取(或写入)。当从文件中读取或写入错误时会出现问题,因此最好尝试记住哪个参数是哪个。
答案 2 :(得分:1)
来自here
大小 - 要写入的每个元素的字节大小。 size_t是无符号整数类型。
计数 - 元素数量,每个元素的大小为字节大小。 size_t是无符号整数类型。
您可以互换大小和数量,在正常情况下不会有任何区别。正如 2501 所提到的,如果无法从文件中读取任何元素,它将会有所不同。
给出的示例将在正常情况下起作用,但应进行更正,以便为size
提供count
和fread
的正确值
fread(buffer, 1, strlen(c)+1, fp);