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)

任何人都知道我在做什么错
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