This question already has answers here:
void main() { if(sizeof(int) > -1) printf(“true”); else printf(“false”); ; [duplicate]
(3个答案)
Why sizeof(int) is not greater than -1? [duplicate]
(2个答案)
5年前关闭。
在VS2013中处理这小段代码,但由于某种原因它无法打印。似乎-1> strlen(str)
任何人都知道我在做什么错
*另外,将打印格式说明符从
(3个答案)
Why sizeof(int) is not greater than -1? [duplicate]
(2个答案)
5年前关闭。
在VS2013中处理这小段代码,但由于某种原因它无法打印。似乎-1> strlen(str)
任何人都知道我在做什么错
char *str="abcd";
if(-1<strlen(str))
printf("The size of the string is %d", strlen(str));
return 0;
最佳答案
strlen()
返回size_t
,它是一个无符号整数类型。 -1
解释为无符号整数是一个很大的值,因此最终它大于字符串的长度。当您尝试比较带符号和无符号值时,可以使用-Wsign-compare
和其他一些编译器中的gcc
标志来警告您。
另外,将字符串的长度与-1
进行比较也没有多大意义。长度不能为负。它总是0
或更大。因此,您可能需要重写代码以针对0
进行测试,或者以其他方式正确实现您要测试的任何条件。
在此代码中,由于长度始终为printf()
或更长,因此您可以合理地期望测试始终能够成功并且0
能够执行。但是您发现测试实际上失败了,并且printf()
从未发生,因为-1
被提升为一个无符号的,因此可以将其与size_t
进行比较。一种简单的解决方案是完全消除这种情况:您知道测试将始终成功,因此不需要它。只需删除if
*:
printf("The size of the string is %zu", strlen(str));
*另外,将打印格式说明符从
%d
更改为%zu
,因为正如Matt McNabb在评论中指出的那样,您正在尝试打印size_t
。关于c - 为什么在C中-1> strlen(t)是true?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30295512/
10-13 04:47