c - 使用 fread 附加到缓冲区

标签 c pointers fread

如何将数据追加到缓冲区:

我有一个缓冲区:

uint8_t* buff = malloc((uint8_t*)malloc(BLOCK+1);

现在我想使用 fread 读取它:(我假设长度 < BLOCK)

fread(buff, 1, length, file)

在第二个fread我想将数据附加到缓冲区 fread(buff + length, 1, length, file) 会修改我的起始指针吗? 我需要保存起始指针吗?我还有什么其他选择?

最佳答案

您第一次阅读的内容可能是:

size_t nbytes = fread(buff, 1, length, file);

您的第二次阅读可能是:

size_t xbytes = fread(buff + nbytes, 1, min(length, BLOCK + 1 - nbytes));

(其中 min() 当然可能是: static inline size_t min(size_t x, size_t y) { return (x < y) ? x : y; } )。

起始偏移量是上一次读取结束的位置;读取的长度是 length再次,或剩余的空间 - 以较小者为准。

完成后,数据的总字节数为 nbytes + xbytes 。您应该检查零,这意味着读取失败。

关于c - 使用 fread 附加到缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46156272/

相关文章:

string - 获取字符串作为格式化输出中的值

c - 每行从文本文件中打印 x 个字节,直到 EOF

c - 如何修复 "Gtk-WARNING ** Content added to the action area of a dialog using header bars"

c - Fork(),等待所有子进程完成 vs 等待一个子进程完成

c 使用 freopen 和 argv[1] 在终端中创建文件

python - SWIG Python - 包装一个需要双指针指向结构的函数

c - 使用标准库写入文件

read.csv 比 data.table::fread 更快

c - 这是正确的 C 声明吗?如果是这样,为什么它不起作用?

c - 存储整数和算术运算符的数据类型?