能有人给我解释一下什么是写的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的第二个参数在这个特定的例子,为什么它与例如。 4(这是sizeof(wchar_t *))或20并导致缓冲区溢出150,这些值根据数据长度而异,
编辑:这些是我一直在使用(上次工作时,我检查它:P 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的答案,那么请重新标记。 –
将指针值写入文件*从不*正确。编写另一个程序来读取文件以便自己查看。 –