C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.72200 の関連記事表示

<< 0 >>
■72200  文字列をバイナリファイルに保存したい
□投稿者/ OROCHI -(2014/05/24(Sat) 21:05:47)

    分類:[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にしてもやはり正常にセーブされません

    文字列をバイナリ形式で保存する方法をご存知の方、よろしければお知恵をお貸し願えないでしょうか?
親記事 /過去ログ120より / 関連記事表示
削除チェック/

■72201  Re[1]: 文字列をバイナリファイルに保存したい
□投稿者/ Azulean -(2014/05/25(Sun) 01:14:20)
    No72200 (OROCHI さん) に返信
    > char *name = "Kaname_Madoka";

    > fwrite(&name, stringsize, 1, fp);

    この 2 つの行をよく見直してみてください。
    何のアドレスを渡しているか? C 系の言語で文字列はどういった存在か? といったところがポイントです。
記事No.72200 のレス /過去ログ120より / 関連記事表示
削除チェック/

■72202  Re[2]: 文字列をバイナリファイルに保存したい
□投稿者/ OROCHI -(2014/05/25(Sun) 11:30:28)
    No72201 (Azulean さん) に返信
    > ■No72200 (OROCHI さん) に返信
    >> char *name = "Kaname_Madoka";
    >
    >> fwrite(&name, stringsize, 1, fp);
    >
    > この 2 つの行をよく見直してみてください。
    > 何のアドレスを渡しているか? C 系の言語で文字列はどういった存在か? といったところがポイントです。

    fwrite(name, sizeof(char), stringsize, fp);
    で可能ですね。fwriteの特性を把握しきれていなかったのも原因のようです
記事No.72200 のレス / END /過去ログ120より / 関連記事表示
削除チェック/

■72211  Re[3]: 文字列をバイナリファイルに保存したい
□投稿者/ 774RR -(2014/05/26(Mon) 09:00:57)
    解決済だけど解決してないと思う

    後半の読み込み部分、提示コードでは正しく動作しないはず。
    C の文字列としては処理が足らないよ。
記事No.72200 のレス /過去ログ120より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -