是否可以使用C中的char迭代器进行FOR循环?

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作为迭代器?

5go*_*der 9

i <= 255
Run Code Online (Sandbox Code Playgroud)

如果i是类型,unsigned char并且该类型在您的平台上是8位(可能是它),那么表达式将始终是true并且您具有无限循环.但是,它是明确定义的行为.该unsigned char会简单地回绕,一旦达到255将其值在0重新开始.

该解决方案是简单当然:改变的类型iint.

为避免将来出现此类意外,请务必打开编译器的警告.如果我用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)

  • 正确的类型是`size_t`. (2认同)