在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] 删除。
我来说两句