当前位置: 技术问答>linux和unix
请教C语言问题,为什么p2输出为空?
来源: 互联网 发布时间:2016-04-06
本文导语: main() { char *p1=“name”; char *p2; p2=(char*)malloc(20); memset (p2, 0, 20); while(*p2++ = *p1++); printf(“%sn”,p2); } | P2指向的位置在移动啊, | p2 已经指向了 字符串的末尾,注意 开发...
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);
}
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);
}
|
P2指向的位置在移动啊,
|
p2 已经指向了 字符串的末尾,注意 开发的时候 如果是申请地址空间指针 千万不要移动,否则会造成内存泄漏。
main()
{
char *p1=“name”;
char *p3 = NULL;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
p3=p2;
while(*p3++ = *p1++);
printf(“%sn”,p2);
}
main()
{
char *p1=“name”;
char *p3 = NULL;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
p3=p2;
while(*p3++ = *p1++);
printf(“%sn”,p2);
}
|
更好的修改,符合软件项目规则
int main(void)
{
char *p1 = “name”;
char *p2 = NULL;
char *p3 = NULL;
p2=(char*)malloc(20);
if ( p2!= NULL ) memset (p2, 0x00, 20);
p3=p2;
while(p1 != NUll){
*p3++ = *p1++;
}
printf(“%sn”,p2);
free(p2);
p2 = NULL;
return 0;
}
并不是多写几行代码你的程序效率就低了,反而由于适合别人阅读,更加好了。
int main(void)
{
char *p1 = “name”;
char *p2 = NULL;
char *p3 = NULL;
p2=(char*)malloc(20);
if ( p2!= NULL ) memset (p2, 0x00, 20);
p3=p2;
while(p1 != NUll){
*p3++ = *p1++;
}
printf(“%sn”,p2);
free(p2);
p2 = NULL;
return 0;
}
并不是多写几行代码你的程序效率就低了,反而由于适合别人阅读,更加好了。
|
int main(void)
{
char *p1 = “name”;
char *p2 = NULL;
char *p3 = NULL;
p2=(char*)malloc(20); //为啥有些等号两边加空格有些又不加呢?
if ( p2!= NULL ) memset (p2, 0x00, 20); //分一下行好看点吧? 前后两20成魔数了
p3=p2;
while(p1 != NUll){
*p3++ = *p1++;
}
printf(“%sn”,p2);
free(p2);
p2 = NULL; //这一句没啥意义,如果说后面有处理,那p3也要加上
return 0;
}
对齐不整, 缺少一些加空行的地方,整个程序没有层次感。
{
char *p1 = “name”;
char *p2 = NULL;
char *p3 = NULL;
p2=(char*)malloc(20); //为啥有些等号两边加空格有些又不加呢?
if ( p2!= NULL ) memset (p2, 0x00, 20); //分一下行好看点吧? 前后两20成魔数了
p3=p2;
while(p1 != NUll){
*p3++ = *p1++;
}
printf(“%sn”,p2);
free(p2);
p2 = NULL; //这一句没啥意义,如果说后面有处理,那p3也要加上
return 0;
}
对齐不整, 缺少一些加空行的地方,整个程序没有层次感。