下面程序段的运行结果是( )。 char *p="abcdefgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")
2013-09-18
展开全部
我也不知道,身边也没有c的编译器,网上看了看。首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,而c语言中默认在ABCD后加个结束符的,所以答案就是4了。
展开全部
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’之前的
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen函数是检查'\0'作为结束符,strcpy后*p的值应该是“ABCD\0fgh”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p+=3后 *p为defgh strcpy 拷贝ABCD给指针p 覆盖原来数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p+=3使指针p指向字符"d",函数strcpy的功能是把后面的字符串复制到p指针指向的空间,即将"ABCD"复制到指针P指向的地址,此时p="ABCD";strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的"\0"。本题结果为4,即字符串“ABCD”的长度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询