我编写了以下代码来反转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]
原文地址:https://www.jb51.cc/c/116412.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。