这个问题已经有了答案:
How does fread really work?
7个答案
所以我试图从我的p->payload(应该是指向数据的指针)向stdout写入一些内容。块的大小是256。
我的问题是,如果切换p->block_size和sizeof(char),stdout总是完全相同的。有人能告诉我为什么吗?谢谢。

fwrite(p->payload, p->block_size,sizeof(char),stdout);

最佳答案

一般来说,只要假设size * items字节将被写入。
这似乎是试图镜像freadapi,它也有sizebytes参数。对于fread,这更有用,因为(例如)您可以要求它读取一个1000字节的项——这意味着“我需要正好1000字节”——或者您可以要求它读取每个字节的1000个项——这意味着“我将占用最多1000字节;比这还少的数据是可以的。”显然,如果您要读取的数据是固定大小的,这里可以使用许多有用的组合。
但是,在fwrite的情况下,您唯一希望写入的字节数小于size * items的时间将处于错误状态。在“磁盘已满”错误的情况下,您可以假设选择sizeitems,这样您可以写尽可能多的完整项,但永远不会写半个项;然而,我从来没有看到有人真正编写了这样的代码,而不仅仅是在磁盘已满时失败。

关于c - 在C中,fwrite()的“size_t大小”和“size_t n个项目”混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21769827/

10-11 21:02