文字列をファイルに書き出し

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

「include」の一覧に を追記

#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 状態における所感

  • 「new char[数値]」で確保したメモリを開放するのは「delete[]」の構文です。配列記述のお忘れなきよう。
  • FireMonkey ではない、昔ながらの古臭い C 言語ソースコードがあらわれると、古い C 言語に慣れた私としては、ほっとしますのですの。
  • 文字列の UnicodeAnsi との相互変換については、たとえ Visual C++ を利用したとしても 同様に悶絶します。というか Visual C++ のほうが重傷です。