早教吧 育儿知识 作业答案 考试题库 百科 知识分享

while(*p2++=*p1++);为什么赋不了值main(){char*p1=“name”;char*p2;p2=(char*)malloc(20);memset(p2,0,20);while(*p2++=*p1++);printf(“%sn”,p2);}这段程序为什么改变不了p2所指向的值,清高手解答

题目详情
while(*p2++=*p1++);为什么赋不了值main() { char*p1=“name”; char*p2; p2=(char*)malloc(20); memset(p2,0,20); while(*p2++=*p1++); printf(“%sn”,p2); } 这段程序为什么改变不了p2所指向的值,清高手解答
▼优质解答
答案和解析
我又被猛住了,丢脸阿…… 一瞬间看上去好像是没错,但是实际上有个非常严重的问题,就是p2指向的是复制到的字符串尾部!自然不会有数据输出了,并不是没复制过去,而是复制过去之后p2从指向缓冲区头变成了指向缓冲区尾部……比如把程序改成这样 intmain() { char*p1="name"; char*p2,*p3; p3=p2=(char*)malloc(20); memset(p2,0,20); while(*p2++=*p1++); printf("%s",p3); free(p3); return0; }