C语言的数据类型有明确的值域,例如unsigned char类型范围为
0~255,而char类型为
-127~127,必须分清楚每一种数据类型的值域范围,分清楚有符号数与无符号数的区别,否则类型定义不当很容易造成程序异常,例如
在上面的例子中,ch是unsigned char型,因此最大值为255,而执行for(ch = 0; ch <= UCHAR_MAX; ch++)最后一次循环ch++后将出现溢出翻转,导致出现死循环。
#define UCHAR_MAX 255
char ch_to_lower[UCHAR_MAX + 1];
void build_to_lower_table(void)
{
unsigned char ch;
for(ch = 0; ch <= UCHAR_MAX; ch++)
{
ch_to_lower[ch] = ch;
}
for(ch = 'A'; ch <= 'Z'; ch++)
{
ch_to_lower[ch] = ch + 'a' - 'A';
}
}
在上面的例子中,ch是unsigned char型,因此最大值为255,而执行for(ch = 0; ch <= UCHAR_MAX; ch++)最后一次循环ch++后将出现溢出翻转,导致出现死循环。