我正在使用Jansson C 库来解析一些 JSON 文件,并使用示例文件中使用的方法,我尝试使用类似 C 的代码来解析它:
FILE *f = fopen(json_path.c_str(), "r");
fseek(f, 0L, SEEK_END);
long size = ftell(f);
fseek(f, 0L, SEEK_SET);
char* data = (char*)malloc((size + 1) * sizeof(char));
long rd = fread((void*)data, 1, size, f);
json_t* root = load_json(data);
虽然此代码在使用 编译时运行良好gcc
,但如果它是由 编译的,它就不行了,g++
因为它是在 C++ 类中实现的,对我来说就是这种情况。Jansson 库返回的错误是关于文件结尾字符的。
那时我尝试实现一个更优雅的类 C++ 代码来做到这一点:
std::ifstream f(json_path.c_str());
if (f) {
std::stringstream s;
s << f.rdbuf();
f.close();
json_t* root = load_json(s.str().c_str());
}
而且该代码永远不会失败,而在我看来,两者都应该做的完全一样。
为了读取整个缓冲区中的文件,我是否在类 C 代码中犯了错误?C++ 编译如何解释类 C 代码以便文件结尾字符可以“消失”?