请教这个字符串拷贝 错在哪里哦

请问这个字符串拷贝 错在哪里哦?
main()
{
                char   *p1=“name”;
                char   *p2;
                p2=(char*)malloc(20);
                memset   (p2,   0,   20);
                while(*p2++   =   *p1++);
                printf(“%sn”,p2);

}

------解决方案--------------------
拷贝越界
------解决方案--------------------
while(*p2++ = *p1++);//p2在不断的修改自已
printf(“%sn”,p2);//最后输出时p2已指向串后,自然输出不对
------解决方案--------------------
跟越界没关系,在p1的最后 "\0 "是可以保护的。。
p2指针被修改后最后指向字符串的末尾,所以打印不出什么东西来。。
char *p1=“name”;
char *p2,*p3;

p2=(char*)malloc(20);
p3 = p2
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p3);

------解决方案--------------------
第一条:char *p1= "name ";
楼主你那个似乎是中文的双引号啊,要用英文下输入的双引号。
------解决方案--------------------
第二 条,同第一条
双引号问题
printf( "%s\n ", p2);


第三条“%sn”,应该是 "%s\n "吧

第四条,缺少必要头文件。

第五条, while(*p2++ = *p1++);
p2不断指向尾巴了。从尾巴开始输出,啥也没有啊。
所以,得保留p2的开始位置。


#include <malloc.h>
#include <memory.h>
#include <iostream.h>


int main()
{
char *p1= "name ";
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);

char * p3 = p2;

while(*p2++ = *p1++);
p2 = p3;

printf( "%s\n ", p2);

return 0;
}