我修改我继承了一个解析器,目前只能从FILE *通过读取保存。 它现在拥有的能够从字符*常量提取数据,以及因此C字符串中的嵌入式文本可以被解析的要求。
我看了看“读者”的形式提供了一个简单的界面,这两个,这样可以提供一个文件阅读器和一个char读者从中解析器可以抢个字符。 例如:
// Inputs
const char *str = "stringToParse";
FILE *f = fopen(...);
// Creating a reader. Each reader stores a function ptr to a destructor
// which closes the file if required and an internal state object.
Reader *r = FileReader(f);
// -or-
Reader *r = CharReader(str);
// Start parsing ---------------------------
// Inside the parser, repeated calls to:
int error = ReadBytes(&buf /* target buf */, &nRead /* n read out */, maxBytes /* max to read */);
// End parsing -----------------------------
CloseReader(&r); // calls destructor, free's state, self
我想保持这种非常简单的。 是否有任何明显的其他方式来实现这一目标使用我错过了较少的基础设施?
注意:我简化了这个大大的还有什么要突出编程接口担忧。 它实际上在内部使用的wchar_t和编码东东玉米粥,是有点老鼠窝一样的,我将在同一时间解开。
谢谢大家谁回答。 最简洁的答案是使用fmemopen。 我在下面提供了一个完整的例子:
#include <stdio.h>
#include <string.h>
void dump(FILE *f) {
char c;
while ((c = fgetc(f)) != EOF)
putchar(c);
}
int main(int argc, char *argv[]) {
/* open string */
const char str[] = "Hello string!\n";
FILE *fstr = fmemopen(&str, strlen(str), "r");
/* open file */
FILE *ffile = fopen("hello.file", "r");
/* dump each to stdout */
dump(ffile);
dump(fstr);
/* clean up */
fclose(ffile);
fclose(fstr);
}