有人可以向我解释以下发生的事情吗?
unsigned int i;
i = strlen("testData");
printf("%d\n", i);
Output:
8
5
为什么要打印额外的 5?
[更新:] 看完评论后,我傻傻地意识到 5 是从哪里来的,对不起!
strlen 代表字符串长度。现在,让我们看看……“testData”。
1 - 't' 2 - 'e' 3 - 's' 4 - 't' 5 - 'D' 6 - 'a' 7 - 't' 8 - 'a'.
我们数了8。
现在我是8。
So, printf("%d\n", i);
打印 8。
然后你的程序中有一些代码打印 5。不能告诉你为什么,因为我看不到代码
一种可能的解释是您有未定义的行为,因为您正在使用带符号整数 ( %d
) 的格式规范,但传递了一个unsigned int
参数。正确的printf
调用是:
printf("%u\n", i);
尽管不太可能,但一种可能的解释是您的实现中未定义的行为导致打印了额外的 5。
此代码段应仅打印 8。此代码部分之外还有其他内容可打印 5