主题:memset问题
畅行天下008
[专家分:0] 发布于 2012-08-23 08:09:00
void main()
{
char* p1="name";
char* p2;
P2=(char*)malloc(20);
memset(p2,0,20);
while(*p2++=*p1++)
printf("%s\n",p2);
}
为什么输出的p2是空的啊?求教
回复列表 (共10个回复)
沙发
bruceteen [专家分:42660] 发布于 2012-08-23 08:56:00
从代码上能看出很多东西,我建议你别搞程序开发
#include
#include
int main()
{
char* p1 = "name";
char* p2 = (char*)malloc(20);
{
char* p1_=p1;
char* p2_=p2;
while(*p2_++=*p1++);
}
printf("%s\n",p2);
return 0;
}
板凳
bruceteen [专家分:42660] 发布于 2012-08-23 08:56:00
代码重贴
[code=c]
#include
#include
int main()
{
char* p1 = "name";
char* p2 = (char*)malloc(20);
{
char* p1_=p1;
char* p2_=p2;
while(*p2_++=*p1++);
}
printf("%s\n",p2);
return 0;
}
[/code]
3 楼
bruceteen [专家分:42660] 发布于 2012-08-23 08:59:00
换个IE重贴
[code=c]
#include
#include
int main()
{
char* p1 = "name";
char* p2 = (char*)malloc(20);
{
char* p1_=p1;
char* p2_=p2;
while(*p2_++=*p1++);
}
printf("%s\n",p2);
return 0;
}
[/code]
4 楼
bruceteen [专家分:42660] 发布于 2012-08-23 09:00:00
没办法了,sorry
5 楼
畅行天下008 [专家分:0] 发布于 2012-08-23 23:58:00
这是一个面试题,好吧,
6 楼
畅行天下008 [专家分:0] 发布于 2012-08-23 23:59:00
你写的还不是错误连篇
7 楼
windy0will [专家分:2300] 发布于 2012-08-25 14:22:00
[quote]
你写的还不是错误连篇[/quote]
其实bruceteen前辈的代码应该是这样的,可能是发贴时浏览器引起的格式问题。
#include <stdlib.h>
#include <stdio.h>
int main()
{
const char *p1 = "name";
char *p2 = (char *) malloc (20);
{
/* 不然如果要再次访问p1 p2,很麻烦 */
const char *p1_ = p1;
char *p2_ = p2;
/* memset(p2,0,20); */
/* while(*p2++=*p1++)
printf("%s\n",p2); */
/* 仔细体会++的语法,以及memset,容易明白没输出 */
/* 建议加个括号 */
while ((*p2_++ = *p1_++))
{}
printf ("%s\n", p2);
/* 这样才会有输出 */
}
return 0;
}
仔细体会,应该明白bruceteen前辈的代码每句都有他的意义。
8 楼
windy0will [专家分:2300] 发布于 2012-08-25 14:27:00
好像不用 【code=c】 【/code】, 我这里发的代码格式也有问题。
好像把代码从文本文档复制出来也行。
9 楼
wei5411 [专家分:0] 发布于 2012-09-02 06:24:00
稍微修改下,指针移动后再打印,肯定是NULL
while(*p2 = *p1++)
{
printf("%s",p2);
*p2++;
}
我来回复