STRLEN printf在两条线上?

时间:2010-10-23 21:07:58

标签: c++ printf strlen

有人可以向我解释以下事件吗?

unsigned int i;
i = strlen("testData");
printf("%d\n", i);

Output:
8
5

为什么打印额外的5?

[更新:]阅读评论后,我愚蠢地意识到5来自哪里,对不起!

3 个答案:

答案 0 :(得分:1)

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.不能告诉你为什么因为我看不到代码

答案 1 :(得分:0)

一种可能的解释是您有未定义的行为,因为您正在使用有符号整数(%d)的格式规范,但传递unsigned int参数。正确的printf电话将是:

printf("%u\n", i);

尽管不太可能,但一种可能的解释是,您的实现中的未定义行为会导致额外的5被打印。

答案 2 :(得分:0)

此代码段应该只打印8.此代码部分之外还有其他内容可以打印5