を回避するために、fstream出力バッファに直接書き込もうとしていmemcpy
ます。
次のコードが機能しないのはなぜですか?
Linux上で適切な長さの出力ファイルをコンパイル、実行、生成します。ただし、出力ファイルには正しいテキストが含まれていません。また、何らかの理由で、を含む2行をコメントアウトすると、str2
長さがゼロの出力ファイルが生成されることに注意してください。
注:この例は回避しませんmemcpy
が、機能する場合は、アプリケーションでを回避するのに役立ちmemcpy
ます。
#include <fstream>
int main(int argc, char *argv[]) {
std::fstream out;
char buffer[512];
out.rdbuf()->pubsetbuf(buffer, 512);
out.open("file.txt", std::fstream::out);
char *str1 = "test text.";
strcpy(buffer, str1);
out.rdbuf()->pubseekpos(strlen(str1), std::ios_base::out);
char *str2 = "why?";
out << str2;
out.flush();
out.close();
}