我知道这fwrite
需要以下参数:
fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
据我所知,size_t
是一个 typedef,仅此而已:
typedef unsigned long size_t;
是否可以使用大于size_t
计数和写入的值?如果不是,我可以以某种方式连接书面块吗?
不,fwrite
只接受适合该size_t
类型的值。
可能有特定于实现的方法来编写更多内容,但对于标准 C,该方法通常只是进行顺序fwrite
调用。随后的每个调用都将附加到您已经编写的内容。
请记住,这size_t
是一种独特的类型。它可能被定义为unsigned long
一些实现,但不能保证。
为了使用fwrite
,您正在编写的整个对象必须在 指向的对象中ptr
。除非你有一个非常混乱的 C 实现,否则不可能有一个大于最大值的对象size_t
,因此尝试写入比这更多的字节将是一个编程错误,因为指向的对象实际上并没有那么大.
从应用程序程序员的角度来看,文件是一系列连续的字节。连续写入会将数据顺序定位到文件中。(此评论是必要的,因为有些人会争论与您的问题无关的细节)。
因此:
fwrite(&user_record1, sizeof(user_record1), 1, fp);
fwrite(&user_record2, sizeof(user_record2), 1, fp);
在文件中生成两条用户记录,一条紧随其后。
如果您有一个非常大的记录,则将其分成两个较小的记录,如下所示:
fwrite(&user_record_parta, sizeof(user_record1), 1, fp);
fwrite(&user_record_partb, sizeof(user_record2), 1, fp);
但是,我会质疑使用如此大的记录的应用程序设计。也许您在应用程序中真正做的是编写用户记录数组,并且该数组变得非常大。如果是这种情况,请写入数组的每个条目,而不是整个数组。
如果你使用比它更大的值,ULONG_MAX
它只会环绕到 0。
您可以做的是写入ULONG_MAX
字节,寻找结束位置并继续写入,然后循环执行,直到您写入所有数据。