为什么在C中-1> strlen(t)为真?

j

在VS2013中处理这小段代码,但由于某种原因无法打印。看来-1> strlen(str)

任何人都知道我在做什么错

char *str="abcd";
if(-1<strlen(str))
printf("The size of the string is %d", strlen(str));    
return 0;
卡列布

任何人都知道我在做什么错

strlen()返回a size_t,它是无符号整数类型。-1解释为无符号整数是一个很大的值,因此最终它大于字符串的长度。当您尝试比较带符号和无符号值时,可以使用-Wsign-compare标志ingcc和其他一些编译器来警告您。

另外,将字符串的长度与进行比较也没有多大意义-1长度不能为负。总是会变得0更大或更。因此,您可能需要重写代码以针对进行测试0,或者以其他方式正确实现您要测试的任何条件。

if(-1<strlen(str)) printf("The size of the string is %d", strlen(str));

在这段代码中,您可以合理地期望测试始终成功并printf()执行,因为长度始终是0或更长。但是您发现测试实际上失败了,并且printf()永远不会发生,因为-1它被提升为未签名的,因此可以与进行比较size_t一种简单的解决方案是完全消除这种情况:您知道测试将始终成功,因此不需要它。只需删除if*

printf("The size of the string is %zu", strlen(str));

*另外,将打印格式说明符从更改为%d%zu因为正如Matt McNabb在评论中指出的那样,您正在尝试打印size_t

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章