【发布时间】:2015-07-29 12:05:19
【问题描述】:
在 VS2013 中处理这段小代码,但由于某种原因它没有打印。似乎 -1>strlen(str)
有人知道我做错了什么
char *str="abcd";
if(-1<strlen(str))
printf("The size of the string is %d", strlen(str));
return 0;
【问题讨论】:
-
strlen(str)的输出值是多少? -
可能是它返回无符号值并且会破坏事情
-
最好在编译器上打开最大设置警告
-
这是因为类型提升和所谓的环绕。 -1 被提升为
size_t并变为SIZE_MAX -
这样做的原因why(整数提升和通常的算术转换)无关紧要。这显然是一个程序员问题,因为您永远不应该期望 -1 大于或等于 any 字符串的长度。如果你做傻事,你必须考虑到你可能看起来(据说)奇怪的结果。