这两个都创建了一个 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。打印时它将截断为字符。另外,更喜欢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;
}
将打印两种不同的长度:一种是计数的,一种是空终止的。