|
分類:[C/C++]
開発環境
Windows 7
Visual Studio 2013
こんにちは、現在「文字列をバイナリファイルに保存して、それを読み出す」という機能を作ろうとしています
そこで、以下のようなソースを用意しました
#include <iostream>
#include <stdlib.h>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
// 保存する文字列
char *name = "Kaname_Madoka";
// 保存される文字列長
int stringsize = 13;
// 保存するファイル名
char *filename = "test.bin";
// ファイルポインタ
FILE *fp;
// ファイルを開いて保存
errno_t error;
if (error = fopen_s(&fp, filename, "wb") != 0) {
// エラー時強制抜け
std::cout << "file write open error!" << std::endl;
system("PAUSE");
return -1;
}
fwrite(&stringsize, sizeof(int), 1, fp);
fwrite(&name, stringsize, 1, fp);
// ファイルを閉じる
fclose(fp);
// 再度ファイルを開く
if (error = fopen_s(&fp, filename, "rb") != 0) {
// エラー時強制抜け
std::cout << "file read open error!" << std::endl;
system("PAUSE");
return -1;
}
// セーブされた文字列を表示
int stringlength = 0;
char loadstring[256];
fread(&stringlength, sizeof(int), 1, fp);
fread(&loadstring, stringlength, 1, fp);
std::cout << loadstring << std::endl; (A)
// ファイルを閉じる
fclose(fp);
system("PAUSE");
return 0;
}
ここで2つの問題が起きています
1.(A)の部分で、文字化けが起こる
2. セーブデータ「test.bin」に文字列「Kaname_Madoka」と保存されない(バイナリエディタで強引に見た限りでは文字列として成立していない情報が保持されています)。1の根本的な原因は多分これなんでしょうが・・・ちなみに文字列をstd::stringにしてもやはり正常にセーブされません
文字列をバイナリ形式で保存する方法をご存知の方、よろしければお知恵をお貸し願えないでしょうか?
|