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

答案是4,为什么不是7. "abcABCD"???急

我也不知道,身边也没有c的编译器,网上看了看。首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,而c语言中默认在ABCD后加个结束符的,所以答案就是4了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-01
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

本回答被提问者和网友采纳
第2个回答  2013-09-18
strlen函数是检查'\0'作为结束符,strcpy后*p的值应该是“ABCD\0fgh”
第3个回答  2013-09-18
p+=3后 *p为defgh strcpy 拷贝ABCD给指针p 覆盖原来数据
第4个回答  2018-07-11
p+=3使指针p指向字符"d",函数strcpy的功能是把后面的字符串复制到p指针指向的空间,即将"ABCD"复制到指针P指向的地址,此时p="ABCD";strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的"\0"。本题结果为4,即字符串“ABCD”的长度。
相似回答