char[32]を含むだけの構造体を使用してバイナリファイルに書き込んでいます。基本的に、文字列配列に対してさまざまな計算を実行し、結果を連結して、データの各ブロックをフォーマットする必要があります。std::stringをnullで終了しないchar配列にコピーしようとしています。これを読めば読むほど、混乱します。私が行った場合:
struct block{
char data[32];
};
block blocks[2048];
std::string buffer;
buffer = "12345678123456781234567812345678";
strcpy(blocks[0].data, buffer.c_str());
c_str()でnullターミネータを追加すると、文字列の長さが33になるため、エラーが発生します。文字列から1文字を引くと機能しますが、nullターミネータがあります。私は次のことをうまく行うことができます:
strcpy(blocks[0].data, "12345678123456781234567812345678");
しかし、さまざまな配列からのさまざまな文字列を連結する必要があることが多いため、最初に文字列を作成したいと思います。たとえば、std :: string:を使用してこれを行うことができます。
std::string buffer = stringArray1[0] + stringArray2[0];
strcpy(blocks[0].data, buffer.c_str());
しかし、それから私は再びヌルターミネータを持っています。ヌルターミネータなしでstd::stringの文字を正確にコピーしたいだけです。
VC++6.0を使用しています。