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

问题描述:

下面程序段的运行结果是( ).char *p="abcdefgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")
为什么不是7."abcABCD"?急

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