wchar_t *文字列をバイナリファイルに書き込んでからfread/fwriteを使ってそれを読み取る正しい方法は何ですか?ここ wchar_t *のバイナリファイルへの読み書きの説明
は、私は値が正しくロードされ、struct someStruct{
int someint;
wchar_t* data;
int someint2;
}
someStruct s;
s.someint = 111;
s.data = L"blah blah .... lets say 1-1000 characters long";
s.someint2 = 222;
//writing
FILE * f = _wfopen(L"myfile",L"wb");
fwrite(&(s.someint), sizeof(int), 1, f);
fwrite(&(s.data), sizeof(wchar*), 1, f);
fwrite(&(s.someint2), sizeof(int), 1, f);
fclose(f);
//reading
FILE * f2 = _wfopen(L"myfile",L"rb");
fread(&(s2.someint), sizeof(int), 1, f2);
fread(&(s2.data), sizeof(wchar*), 1, f2);
fread(&(s2.someint2), sizeof(int), 1, f2);
fclose(f2);
すべてが動作している(その作業)持っているものです。 この特定の例でfreadとfwriteの2番目のパラメータは何ですか?質問はです。 4(sizeof(wchar_t *))または20でバッファオーバランが150の場合、これらの値はデータ長によって異なります。
EDIT:これらは私が使っているものです。 1年前):
はwchar_t* loadStrFromFile(FILE* file) {
int strLen;
fread(&(strLen), sizeof(int), 1, file);
wchar_t* result = new wchar_t[strLen];
fread(result, strLen, sizeof(wchar_t), file);
return result;
}
void saveStrToFile(const wchar_t*& data, FILE* file) {
int strLen = wcslen(data)+1;
fwrite(&strLen, sizeof(int), 1, file);
fwrite(data, strLen, sizeof(wchar_t), file);
}
は、まあ、それは私と一緒に間違っているすべてのものを列挙するのに長い時間がかかるだろうさそれ。 – Puppy
もしこれがC++なら、あなたが言うように、 'std :: wstring'を使ってストリームを使って永続させるのはなぜですか?そしてCの答えが必要な場合は、再度タグを付けてください。 –
ファイルにポインタ値を書き込むことは*決して*正確ではありません。あなた自身でこれを見るためにファイルを読む別のプログラムを書いてください。 –