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);
このコードは でコンパイルされた場合はうまく機能しますが、C++ クラスで実装された私の場合のように、 でgcc
コンパイルされた場合は機能しません。g++
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 ライクなコードをどのように解釈するのか?