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