A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hui1107464497 中级黑马   /  2015-5-25 13:54  /  1734 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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???

6 个回复

倒序浏览
其中str就是一个指针,str+2就是指针移动2个字节,如果你单独打印str+2结果就是z,所以用strcpy时是从z开始覆盖的,xy就保留了下来。打印的时候你是用的str,而没有让它移动指针,所以xy也打印出来啦!
回复 使用道具 举报
strcpy(char *x,char *y) 的函数功能你没搞清。它的功能是从把从y指向的地址开始且含有NULL结束符的字符串复制到以x指向的地址空间
回复 使用道具 举报 1 0
   楼主加油  同在努力中
回复 使用道具 举报
jingkai 发表于 2015-5-25 17:16
楼主加油  同在努力中

谢谢,
回复 使用道具 举报
yuang4074 发表于 2015-5-25 17:12
strcpy(char *x,char *y) 的函数功能你没搞清。它的功能是从把从y指向的地址开始且含有NULL结束符的字符串 ...

噢!谢谢提醒,我理解错误了,还以为是从z开始将右边对复制过来。
回复 使用道具 举报
hui1107464497 发表于 2015-5-25 17:24
噢!谢谢提醒,我理解错误了,还以为是从z开始将右边对复制过来。 ...

不客气,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马