0

私はEmbarcaderoC++ Builder XEを使用しており、123456を次のようなテキストファイルに書き込もうとしています。

String teststring = "123456";
int iFileHandle = FileCreate("example.txt");
int iLength = teststring.Length()*sizeof(wchar_t);
int output = FileWrite(iFileHandle, teststring.w_str(), iLength);

しかし、出力は次のとおりです。

1 2 3 4 5 6

すべての文字の後にスペースが追加されています。iLengthが12であることがわかります。文字列の作成時にスペースが追加されますが、これを防ぐにはどうすればよいですか?

4

3 に答える 3

1

System::StringXEでは16ビット値を使用するUTF-16としてエンコードされます。表示されるこれらの「スペース」は、これらの文字値の上位バイトであり、ASCII文字値の場合はnullです。ファイルにこれらのバイトを含めたくない場合は、Stringそれらを使用しない別のエンコーディングに変換する必要があります。例:

String teststring = "123456"; 
AnsiString s = teststring; // or UTF8String, or any other MBCS encoding you want
int iFileHandle = FileCreate("example.txt"); 
int iLength = s.Length() * sizeof(AnsiChar); 
int output = FileWrite(iFileHandle, s.c_str(), iLength); 
于 2012-06-21T22:31:54.903 に答える
0

この場合、文字列の長さが6で、wchar_tのサイズが2であるため、iLengthは12であると想定されます。したがって、実際、文字列の作成時にスペースは追加されません。これらは、2。、4.、6.、8。、および10です。ここで文字列から幅の広い文字列を作成すると、スペース文字に割り当てられて初期化されます。

teststring.w_str()

代わりにc_str()を使用してみてください。

String teststring = "123456";
int iFileHandle = FileCreate("example.txt");
int iLength = teststring.Length();
int output = FileWrite(iFileHandle, teststring.c_str(), iLength);
于 2012-06-21T05:20:10.930 に答える
0

文字列リストを使用して、必要な文字列を追加してから、文字列リストをファイルに保存することができます。

TStringList *Temp = new TStringList( );
Temp->Add("123456");
Temp->SaveToFile(("example.txt");

delete Temp;
于 2012-06-21T07:38:27.227 に答える