これらは両方とも 256 バイトのファイルを作成します。
#include <fstream>
#include <string>
int main(void)
{
std::ofstream file("output.txt", std::ios_base::binary);
std::string fileString;
for(int i = 0; i < 256; i++)
{
fileString += static_cast<char>(i);
}
file << fileString;
}
と:
#include <fstream>
#include <string>
int main(void)
{
std::ofstream file("output.txt", std::ios_base::binary);
std::string fileString;
for (int i = 0; i < 256; ++i)
{
file << static_cast<char>(i);
}
file.close();
}
256 番目の ASCII 文字はなく、0 ~ 255 しかないため、off-by-one エラーが発生する前に注意してください。印刷時に文字に切り捨てられます。また、好むstatic_cast
。
それらをバイナリとして開かないと、最後に改行が追加されます。私の標準は出力の分野では弱いですが、テキストファイルは常に最後に改行があると想定されていることを知っており、これを挿入しています。私が標準で見つけることができるのは、「デストラクタが追加の実装定義の操作を実行できる」ということだけなので、これは実装定義だと思います。
もちろん、バイナリとして開くと、すべてのバーが削除され、ファイルのすべての詳細を制御できます。
Alterlife の懸念事項として、文字列に 0 を格納できますが、C スタイルの文字列は 0 で終了します。したがって、次のようになります。
#include <cstring>
#include <iostream>
#include <string>
int main(void)
{
std::string result;
result = "apple";
result += static_cast<char>(0);
result += "pear";
std::cout << result.size() << " vs "
<< std::strlen(result.c_str()) << std::endl;
}
2 つの異なる長さを出力します: 1 つはカウントされ、もう 1 つは null で終了します。