黑马程序员技术交流社区

标题: 期待高手指教。。 [打印本页]

作者: hui1107464497    时间: 2015-5-25 13:54
标题: 期待高手指教。。
int main(int argc, const char * argv[]) {
     char p1[15]= "abcd",*p2="ABCD", str[50]="xyz";
     strcpy(str+2,strcat(p1+2,p2+1));
      printf("%s",str);
    return 0;
}
运行结果是:xycdBCD
就是不明白为什么是 xy???
作者: 13673696542    时间: 2015-5-25 16:58
其中str就是一个指针,str+2就是指针移动2个字节,如果你单独打印str+2结果就是z,所以用strcpy时是从z开始覆盖的,xy就保留了下来。打印的时候你是用的str,而没有让它移动指针,所以xy也打印出来啦!
作者: yuang4074    时间: 2015-5-25 17:12
strcpy(char *x,char *y) 的函数功能你没搞清。它的功能是从把从y指向的地址开始且含有NULL结束符的字符串复制到以x指向的地址空间
作者: jingkai    时间: 2015-5-25 17:16
   楼主加油  同在努力中
作者: hui1107464497    时间: 2015-5-25 17:18
jingkai 发表于 2015-5-25 17:16
楼主加油  同在努力中

谢谢,
作者: hui1107464497    时间: 2015-5-25 17:24
yuang4074 发表于 2015-5-25 17:12
strcpy(char *x,char *y) 的函数功能你没搞清。它的功能是从把从y指向的地址开始且含有NULL结束符的字符串 ...

噢!谢谢提醒,我理解错误了,还以为是从z开始将右边对复制过来。
作者: yuang4074    时间: 2015-5-25 17:31
hui1107464497 发表于 2015-5-25 17:24
噢!谢谢提醒,我理解错误了,还以为是从z开始将右边对复制过来。 ...

不客气,加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2