奇怪的文件输出c++

Strange file output C++

本文关键字:输出 c++ 文件      更新时间:2023-10-16

我想打印数字并在它们之间放置一个空格,但就在编译之后,我注意到我在那里留下了+操作符(c#实践)。当我运行这个程序时,它立即停止工作,但在文本文件中有一个非常奇怪的输出。为什么文本文件是这样的?

#include <iostream>
#include <fstream>
using namespace std;
    int main()
    {
        int i=0;
        ofstream f("out.txt");
        while(i != -1)
        {
            f << " " + i++;
        }
        return 0;
    }

551Kb文件中的一些行:

deleted virtual method called
eleted virtual method called
leted virtual method called
eted virtual method called
ted virtual method called
ed virtual method called
d virtual method called
 virtual method called
virtual method called
irtual method called
rtual method called
tual method called
ual method called
al method called
l method called
 method called
method called
ethod called
thod called
hod called
od called
d called
 called
called
alled
lled
led
ed
d

当您向字符串文字添加整数时,它会执行指针算术。所以" " + i++获取字符串字面值的地址,加上i,并增加i。然后它将添加的结果传递给<<,因此该地址上的任何c风格字符串都被打印到文件中。

由于您访问的是字符串文本的内存边界之外,这将导致未定义的行为。所以它在向文件中写入垃圾。看起来字符串字面量后面的内存包含了来自运行时库的内部错误消息,而您正在打印该字符串。由于i每次递增,因此每次迭代都在消息中延迟一个字符开始。

你也有一个实际上的无限循环,因为增加i不会导致-1,直到它溢出并环绕。