字符数组 – 为什么循环不是无限的?

我编写了以下代码来反转C中的字符串.代码似乎正常工作,这就是为什么我感到困惑.有谁知道为什么这里没有错误?我期待for循环中的数组超出界限或无限循环,但似乎循环在它变为负值之前中断.
#include <stdio.h>
#include <string.h>

void reverse(char* str);

void reverse(char* str)
{
    size_t len = strlen(str); 

    for(int i = (int)len-1; i<=len; i--)
    {
        printf("%c",str[i]);
    }
}

int main (int argc,const char * argv[])
{
    char string[] = {'h','e','l','o','\0'};
    reverse(string);

    return 0;
}

解决方法

size_t通常定义为unsigned.比较有符号和无符号数或相等等级时,有符号数将转换为无符号数.由于签名号码可能在您的机器中以二进制补码表示,因此负数实际上更大.

因此,一旦我达到-1,它就会比较大,因为它比len大.

您可以通过在编译器中打开警告来查看这种情况.

使用clang编译程序-Weverything产生此警告

unsigned.c:10:30: warning: comparison of integers of different signs: 
                  'int' and 'size_t' (aka 'unsigned long') [-Wsign-compare]

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...