【发布时间】:2020-06-12 12:55:24
【问题描述】:
#include <stdio.h>
#include <string.h>
int main()
{
const char str[11]= "Hello World";
if(-1 > strlen(str)){
printf(str);
}
return 0;
}
这个 if 条件应该总是返回 false。但这里不是。
但是,如果我将 strlen(str) 值放入另一个变量并与之进行比较,那么它会按预期工作。
我在这里缺少什么?
它是编译器依赖还是什么?
【问题讨论】:
-
您的
str没有以空值结尾,因为您没有为空值留出足够的空间。所以在它上面调用strlen会跑到最后,这会导致未定义的行为。在其上调用printf也是未定义的。 -
另外,请记住
strlen返回一个 unsigned 值 (size_t)。 -
开启编译器警告
-Wall -Wextra -
显然
C的新手很容易激怒更有经验的C程序员,只需不查看编译器警告,并在发布的示例代码中调用 UB。还是所有的向下点击只是盲目的堆积?说真的,现在已经收到消息了。在这里,对向下点击触发手指进行更多的自我控制可能是个好主意。 -
@ryyker:确实。这个问题很清楚,可以回答。那里也有可编译的代码,实际和预期的行为都有很好的记录。
标签: c++ c implicit-conversion unsigned strlen