我用的是Jansson C庫來分析一些JSON文件,並使用示例文件所使用的方法我嘗試使用類似C的代碼來解析它:緩衝區中的文件讀取C和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代碼以便文件字符結束可以「消失」?
'load_json'可能期望*** null結尾的**字符串*?因爲C代碼不會終止它讀取的數據。這是你的問題嗎?這是你所說的「關於文件字符結束」的意思嗎? –