控制台输出溢出

Console output overflow

我正在尝试编写一个简单的程序来输出 32 到 127 的 ascii 字符,当我执行它时它会输出 32 到 127 的字符......一遍又一遍,直到它崩溃。这是代码:

#include <iostream>
using namespace std;

int main()
{
char letter = 32;

for (letter = 32; letter <= 127; letter++) 
{
cout << letter << " ";
}

cout << endl;
system("pause");
return 0;
}

这有点奇怪,因为如果我将 "letter" 更改为一个 int 变量,它就可以正常工作。

char 的值可以是 -128..127,所以它总是 <= 127.

char是正好1个字节的数据类型,一般是8位。由于您没有指定 char 的 "signedness",您的编译器可能假定 signed char,运行 从 -128 到 127。

那个循环 运行 永远,因为从 127 递增一个带符号的字符会由于溢出而导致 -128,而 -128 仍然小于或等于 127。 解决这个问题的最简单方法是使用更大的整数。

int letter = 32;
for (letter = 32; letter <= 127 ; letter++) {
    cout << static_cast<char>(letter) << " ";
}

可能您的 char 已签名,因此它的值范围为 -128..+127。一旦它达到 127 并递增它,它就会变成 -128,仍然小于 127,并且循环无限运行。请改用 intunsigned char