使用strlen比较C中的字符串长度



我对strlen的行为很困惑,下面的for循环在尝试时永远不会结束(不添加break(,而I&lt-2应在第一步中返回False。

它与我的编译器有关吗?我误解了什么?

#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "longstring";
char b[] = "shortstr";
printf("%dn", strlen(b) - strlen(a)); // print -2
for (int i = 0; i < strlen(b) - strlen(a); i++)
{
printf("why print this, %d  %dn", i, strlen(b) - strlen(a));
break;
}
return 0;
}

输出

-2
why print this, 0 -2

printf 调用中的转换说明符

printf("%dn", strlen(b) - strlen(a)); // print -2

不正确。函数strlen返回无符号整数类型size_t的值。因此,这个表达式strlen(b) - strlen(a)也具有类型size_t。所以你需要写

printf("%dn", ( int ) strlen(b) - ( int )strlen(a) ); // print -2

printf("%zun", strlen(b) - strlen(a)); // print a big positive value.

在针对环路的条件下

for (int i = 0; i < strlen(b) - strlen(a); i++)

如上所述的表达式CCD_ 7具有无符号整数类型CCD_。所以它的值不能是负值,而是代表一个大的正值。

再次相反,你需要写

for (int i = 0; i < ( int )strlen(b) - ( int )strlen(a); i++)

或者你可以写

for ( size_t i = 0; i + strlen( a ) < strlen(b); i++)

strlen(b) - strlen(a);是负数

并且CCD_ 10是0或+ve

因此,环路

for (int i = 0; i < strlen(b) - strlen(a); i++)

永远不会结束为i(+ve(永远不会是-ve

相关内容

  • 没有找到相关文章

最新更新