C/C++中的strlen问题
charstr[][9]={"hello","welcome"};char*p=str[0];printf("%d",strlen(p+10));为什么输出结果为6?而把...
char str[][9]={"hello","welcome"};
char *p=str[0];
printf("%d",strlen(p+10));
为什么输出结果为6?
而把10去掉,即改为strlen(p)后,则输出结果为5? 展开
char *p=str[0];
printf("%d",strlen(p+10));
为什么输出结果为6?
而把10去掉,即改为strlen(p)后,则输出结果为5? 展开
3个回答
展开全部
很好解释。
第一,为什么输出结果为6?
首先,你定义了一个二维数组,一分量是 2,二分量是 9,总共 18 个元素。注意,这是重点。你的 p 指向的是 str[0][0] 即为 'h'。在 "hello" 后面跟着的是 4 个 NULL。而数组在内存中连续排放,所以 p+10 指向了 str[1][1] 即为 'e',所以从 strlen(p+10) 得出的结果是 6(为什么?看下一个解答。)。
第二,为什么把10去掉,即改为strlen(p)后,则输出结果为5?
看看 strlen 的工作原理——遍历数组中的元素,输出遇到的第一个 NULL 前的元素个数。然后你就懂了。
第一,为什么输出结果为6?
首先,你定义了一个二维数组,一分量是 2,二分量是 9,总共 18 个元素。注意,这是重点。你的 p 指向的是 str[0][0] 即为 'h'。在 "hello" 后面跟着的是 4 个 NULL。而数组在内存中连续排放,所以 p+10 指向了 str[1][1] 即为 'e',所以从 strlen(p+10) 得出的结果是 6(为什么?看下一个解答。)。
第二,为什么把10去掉,即改为strlen(p)后,则输出结果为5?
看看 strlen 的工作原理——遍历数组中的元素,输出遇到的第一个 NULL 前的元素个数。然后你就懂了。
追问
为什么在hello后面跟着4个NULL呢?
按照下面strlen的工作原理的话,第一个输出的是5才对啊?
展开全部
很好解释。
第一,为什么输出结果为6?
首先,你定义了一个二维数组,一分量是 2,二分量是 9,总共 18 个元素。注意,这是重点。你的 p 指向的是 str[0][0] 即为 'h'。在 "hello" 后面跟着的是 4 个 NULL。而数组在内存中连续排放,所以 p+10 指向了 str[1][1] 即为 'e',所以从 strlen(p+10) 得出的结果是 6(为什么?看下一个解答。)。
第二,为什么把10去掉,即改为strlen(p)后,则输出结果为5?
看看 strlen 的工作原理——遍历数组中的元素,输出遇到的第一个 NULL 前的元素个数。然后你就懂了。追问为什么在hello后面跟着4个NULL呢?
按照下面strlen的工作原理的话,第一个输出的是5才对啊?
第一次 输出的是 elcome 的长度 所以是6
第一,为什么输出结果为6?
首先,你定义了一个二维数组,一分量是 2,二分量是 9,总共 18 个元素。注意,这是重点。你的 p 指向的是 str[0][0] 即为 'h'。在 "hello" 后面跟着的是 4 个 NULL。而数组在内存中连续排放,所以 p+10 指向了 str[1][1] 即为 'e',所以从 strlen(p+10) 得出的结果是 6(为什么?看下一个解答。)。
第二,为什么把10去掉,即改为strlen(p)后,则输出结果为5?
看看 strlen 的工作原理——遍历数组中的元素,输出遇到的第一个 NULL 前的元素个数。然后你就懂了。追问为什么在hello后面跟着4个NULL呢?
按照下面strlen的工作原理的话,第一个输出的是5才对啊?
第一次 输出的是 elcome 的长度 所以是6
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-08-16
展开全部
str是一个2行9列的二维数组,p指向第1个字符串“hello”;
二维数组是按行优先线性存放的,即str[1]字符串"welcome"紧跟在str[0]后存放;
p+10从str[0]的第0行第0个元素,向后10个地址空间到了第1行第1个元素,即字母'e',strlen(p+10)计算的是字符串"elcome"的长度为6。
而strlen(p)计算的是第1个字符串“hello”的长度,因为始终指向str[0]。
二维数组是按行优先线性存放的,即str[1]字符串"welcome"紧跟在str[0]后存放;
p+10从str[0]的第0行第0个元素,向后10个地址空间到了第1行第1个元素,即字母'e',strlen(p+10)计算的是字符串"elcome"的长度为6。
而strlen(p)计算的是第1个字符串“hello”的长度,因为始终指向str[0]。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询