控制台输出溢出
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,并且循环无限运行。请改用 int
或 unsigned char
。
我正在尝试编写一个简单的程序来输出 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,并且循环无限运行。请改用 int
或 unsigned char
。