下面程序段的运行结果是( )。 char *p="abcdefgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")

答案是4,为什么不是7."abcABCD"???急... 答案是4,为什么不是7. "abcABCD"???急 展开
 我来答
匿名用户
2013-09-18
展开全部
我也不知道,身边也没有c的编译器,网上看了看。首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,而c语言中默认在ABCD后加个结束符的,所以答案就是4了。
百度网友6b264c8
推荐于2018-03-01 · TA获得超过288个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:209万
展开全部
halps 说得有道理

strcpy的实现代码
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest; //[3]
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s)"; //[2]
while ((*strDest++=*strSrc++)!='\0'); //[4]
return strDestCopy;
}

函数把‘\0’也拷贝进去了的,而strlen也是取得‘\0’之前的
追问
p+=3不是使指针指向了第三个c后面,那复制不是应该从c之后开始复制吗?
追答
p+=3之后,*p应该就是指向defgh\0了,复制之后变成ABCD\0
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a5800a6b6
2013-09-18
知道答主
回答量:23
采纳率:0%
帮助的人:7.6万
展开全部
strlen函数是检查'\0'作为结束符,strcpy后*p的值应该是“ABCD\0fgh”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你好_旧时光___
2013-09-18 · TA获得超过140个赞
知道答主
回答量:116
采纳率:0%
帮助的人:20.4万
展开全部
p+=3后 *p为defgh strcpy 拷贝ABCD给指针p 覆盖原来数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
那个萝卜嘞
2018-07-11
知道答主
回答量:5
采纳率:0%
帮助的人:4114
展开全部
p+=3使指针p指向字符"d",函数strcpy的功能是把后面的字符串复制到p指针指向的空间,即将"ABCD"复制到指针P指向的地址,此时p="ABCD";strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的"\0"。本题结果为4,即字符串“ABCD”的长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式