gpt4 book ai didi

c - 使用 setvbuf 使内存缓冲区像 FILE*

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:58 34 4
gpt4 key购买 nike

我需要一种跨平台方式将内存缓冲区视为 FILE*。我看到其他问题指出没有可移植的方法来执行此操作(我需要 linux 中的 fmemopen 但它在 Windows 平台上失败)。

我试过使用 setvbuf,它似乎可以工作。谁能指出使用 setvbuf 函数的确切问题?

另外,我看过 C 标准草案 WG14/N1256 和 7.19.5.6 说:

the contents of array at any time are indeterminate.

我不明白如果我使用自己的缓冲区,它的内容怎么会不确定?

编辑:感谢您的所有回答。不再使用此方法。

最佳答案

不,真的,没有可移植的方法来做到这一点。

使用 setvbuf 可能看起来有效,但您实际上是在调用未定义的行为,它会在意想不到的时间以意想不到的方式失败。 GNU C 库确实有 fmemopen(3)作为扩展,正如您提到的,但它不能移植到非 GNU 系统。

如果您正在使用一些需要 FILE* 指针的库,并且内存中只有所需的数据,您只需将其写出到一个临时文件并传入一个该文件的句柄。理想情况下,您的库应该提供一个替代函数,该函数采用内存指针而不是文件指针,但如果没有,您就不走运了(您应该向库编写者提示该缺陷)。

关于c - 使用 setvbuf 使内存缓冲区像 FILE*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500394/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com