top / index / prev / next / target / source

2012-12-07 diary: [C++Builder] XE3 文字列をファイルに書き出し

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

[C++Builder] XE3 文字列をファイルに書き出し

何通りか手段がありますが、基本的な C 言語をベースに文字列をファイル出力する例をつくりました。

「include」の一覧に <stdio.h> を追記

#include <stdio.h>

AnsiString を経由してファイルに文字列を出力

  const UnicodeString inputStr = "あああ";

  FILE *file = fopen("c:\\temp\\test.txt", "w+");

  {
    // Unicode -> Ansi
    const AnsiString ansistr = AnsiString(inputStr);
    char *buf = new char[ansistr.Length() + 1];
    strcpy(buf, ansistr.c_str());

    fwrite(buf, sizeof(char), strlen(buf), file);

    delete[]buf;
  }

  fflush(file);
  fclose(file);

AnsiString#c_str() が戻すポインタは しばらくは安泰?

UnicodeString を AnsiString に変換した際、該当の AnsiString オブジェクトに変化を与えない限りは c_str() メソッドで戻される文字配列は 変化ないことがわかりました (ソースコードおよびマニュアルにおいて確認実施)。このため、記述的には new や delete を省略して記述することは可能なようです。(もっと複雑な場合には、やはり new char[] や delete[] の利用が必要なようです)


const UnicodeString inputStr = "あああ"; FILE *file = fopen("c:\\temp\\test12.txt", "w+"); { // Unicode -> Ansi const AnsiString ansistr = AnsiString(inputStr); fwrite(ansistr.c_str(), sizeof(char), strlen(ansistr.c_str()), file); } fflush(file); fclose(file);

はじめたて C++Builder 状態における所感

リンクメモ

登場キーワード


この日記について