用gcc的请进来看看,这段程序太叫我郁闷了!!!!

chl 2003-12-19 05:00:50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char str[]={"xyz"},str1[]="abc",str2[]="efg";
char *p;//***
char *s;//***
p=str;
strcpy(s,p);
printf("%s,%s",s,p);
printf("\r\n%d,%d",s,p);
printf("\r\nlen:%d",strlen(p));

system("PAUSE");
return 0;
}

就这段小小的C程序,把声明*p和*s的顺序调转编译运行会有很不同的效果,一个正常,一个出错,
我在win2k,linux的gcc都试过了,你试试。
...全文
9 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacierrr 2003-12-19
s = new char[strlen(p) + 1];
strcpy(s, p)
delete []s;
回复
liyunjie 2003-12-19
我很莱,但我很想知道假如把P全部拷贝到S,应如何修改呢?还有给S 分配了内存,该如何释放啊?我是初学者,诚请各位高手赐教!谢谢。
回复
BenWong1981126 2003-12-19
是内存分配的问题,至于为什么恰好不把P COPY 到S不出错是因为S指向的是一段闲置的内存吧
回复
qhgary 2003-12-19
运行不会出错只能说是巧合,但是这并不表明这段程序永远不出错,他一定会在某种条件下面崩溃,还是前面朋友们说得那样,指针没有初始化,他的后果是不可预测的。
回复
kopp 2003-12-19
printf("\r\n%d,%d",s,p);
是不是在这段出错?。
回复
chl 2003-12-19
这里有另外一个版本,运行不会出错的!!!为什么呢?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char str[]={"xyz"},str1[]="abc",str2[]="efg";
char *s;//***
char *p;//***
p=str;
strcpy(s,p);
printf("%s,%s",s,p);
printf("\r\n%d,%d",s,p);
printf("\r\nlen:%d",strlen(p));

system("PAUSE");
return 0;
}
回复
haitun88 2003-12-19
是的,你的s没被分配内存,当然报错.
回复
chl 2003-12-19
是纯C,不是cpp啊
回复
lovecreak 2003-12-19
我试了一下,我觉得你这是内存越界了吧
*s并没有分配内存,它存储的是一个随机数,但后面的
strcpy(s,p);
会把s里的内容当作一个地址,这当然报错了
回复
zgycool 2003-12-19
char *p=new char[];
char *s=new char[];
回复
hdqqq 2003-12-19
strcpy()

s指针有问题,没有分配内存.
回复
layman2008 2003-12-19
s没有初始化

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char str[]="xyz",str1[]="abc",str2[]="efg";
char *p;//***
char *s;//***
p=str;
s = p; ///////////////
strcpy(s,p);
printf("%s,%s",s,p);
//printf("\r\n%d,%d",s,p);
//printf("\r\nlen:%d",strlen(p));

system("PAUSE");
return 0;
}
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告