Alb*_*kić 2 c unsigned iterator for-loop char
我使用unsigned char作为迭代器时遇到问题.使用以下代码会导致卡在FOR循环中.输出看起来像这样.
unsigned char i;
char * arr;
int * freq;
arr = (char *)(malloc(256*sizeof(char)));
freq = (int *)(malloc(256*sizeof(int)));
for (i=0; i<=255;i++){
arr[i]=i;
freq[i]=0;
printf("%c",i);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么会这样?是否因为使用unsigned char作为迭代器?
i <= 255
Run Code Online (Sandbox Code Playgroud)
如果i是类型,unsigned char并且该类型在您的平台上是8位(可能是它),那么表达式将始终是true并且您具有无限循环.但是,它是明确定义的行为.该unsigned char会简单地回绕,一旦达到255将其值在0重新开始.
该解决方案是简单当然:改变的类型i来int.
为避免将来出现此类意外,请务必打开编译器的警告.如果我用GCC编译伪造循环并将它传递给-Wall和-Wextra标志,它会告诉我这个.
main.c: In function ‘main’:
main.c:5:17: warning: comparison is always true due to limited range of data type [-Wtype-limits]
for (i = 0; i <= 255; ++i)
^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |