读书人

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

发布时间: 2012-03-23 12:06:21 作者: rapoo

请问这个字符串拷贝 错在哪里哦?
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;
}

读书人网 >C语言

热点推荐