3

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 ライクなコードをどのように解釈するのか?

4

1 に答える 1