控制台输出溢出

时间:2015-02-22 15:59:57

标签: c++ loops char console-application

我试图编写一个输出ascii字符32到127的简单程序,当我执行它时,它会一遍又一遍地输出字符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;
}

这有点奇怪,因为如果我改变了#34;字母&#34;对于一个int变量,它工作正常。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

char是一个只有1个字节的数据类型,通常是8位。由于您尚未指定char的“签名”,因此您的编译器可能假设signed char,其范围为-128到127.

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

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

答案 2 :(得分:0)

char的值可以是-128..127,因此它始终为<= 127