使用类似文件的C字符串*

mat*_*ots 16 c file-pointer

我有一个C函数,可以从中读取字符流FILE*.

FILE*在这种情况下,我如何从字符串创建一个?

编辑:

我认为我的原帖可能会产生误导.我想FILE*从一个文字字符串值创建一个,以便生成的结果FILE*就像某个文件某处包含字符串而不实际创建文件一样.

以下是我想做的事情:

void parse(FILE* f, Element* result);

int main(int argc, char** argv){
    FILE* f = mysteryFunc("hello world!");
    Element result;
    parse(f,&result);
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 20

标准C不提供此类功能,但POSIX定义了fmemopen()完全符合您需要的功能.


Dav*_*ave 6

不幸的是,C的标准库不提供此功能; 但有几种方法可以解决它:

  • 创建一个临时文件,将字符串写入其中,然后打开它进行读取.如果您有POSIX,gettempnam将为您选择一个唯一的名称

  • 另一个选项(仅适用于POSIX)是fork一个新进程,其作用将是write字符串到管道,而fdopen另一端是FILE*为您的函数获取一个.

  • 正如@KeithThompson所指出的那样,fmemopen确实是你想要的,所以如果你有POSIX,请使用它.在任何其他平台上,(除非您能找到平台等效的平台),您将需要一个临时文件.