找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 719|回复: 6

拷贝问题

[复制链接]
发表于 2009-11-4 00:23:56 | 显示全部楼层 |阅读模式 IP:江苏扬州
void test()
{
char *p;
strcpy(p,"abc");
} //1.大家讨论一下程序出错的原因?
//2.定义了一指针变量,系统会给它分配一内存吗?它所占用的内存方式是属于堆还是栈啊?
发表于 2009-11-4 00:23:57 | 显示全部楼层 IP:江苏扬州
2006-9-1 15:40:56 kai

等 级:版主
威 望:52
帖 子:3337
专家分:17
注 册:2004-4-25
第 3 楼   得分:0  
穆扬,

撇开楼主的话题, 我个人觉得, 他人的水平高低与否是不应该讨论的, 这也是对他人的一种尊重. 除非人家主动提出让你对他的水平予以评论.

paopao,

回到楼主的话题, 既然是copy, 那么就是将一样东西从一个地方挪到另一个地方(复制一份) , 那么就要明确目标地点. 就好像搬家一样, 如果你不明确新家的地址, 你怎么搬呢?

在你的代码中你申明了一个char 指针变量 p, 这个时候p 还是一个野指针. 如果你要使用 strcpy 这个函数, 那么你就需要有一个合适的目标空间. 而你的代码中并没有什么目标空间, 所以程序出错.

如果你使用new 开辟了一段空间, 然后将p 指向所开辟空间的首地址, 那么你就可以使用 strcpy 函数了, 当然如果使用new 需要配对使用 delete 来最终清除所开辟的空间. 你也可以先定义一个数组, 然后将 "abc" copy 到那个数组.
回复

使用道具 举报

发表于 2009-11-4 00:23:58 | 显示全部楼层 IP:江苏扬州
主要是没有给p所指向的地址分配空间.
回复

使用道具 举报

发表于 2009-11-4 00:23:59 | 显示全部楼层 IP:江苏扬州
定义了一指针变量,系统会给它分配一内存吗?它所占用的内存方式是属于堆还是栈啊?

的确,指针就是变量,声明了,他就有了地址,也就占据了内存,(就和int i;一样,都

存储在栈中)。大小相当于sizeof(int);

但是这个内存只是用来存储这个指针的值的。并不是用来存储拷贝过来的"abc"的。这个时

候你还没有给个地方装他们。所以就要分配一个内存来存储他们。
回复

使用道具 举报

发表于 2009-11-4 00:24:00 | 显示全部楼层 IP:江苏扬州
bs 二楼.........你倒是说说你对 堆栈又 理解多少????
回复

使用道具 举报

发表于 2009-11-4 00:24:01 | 显示全部楼层 IP:江苏扬州
同意3楼的,大家水平是有高低之分,发帖就是为了得到问题的解决嘛,2楼的大侠这样说就不对了.
回复

使用道具 举报

发表于 2009-11-4 00:24:02 | 显示全部楼层 IP:江苏扬州
上面的错误,主要是他声明了指针,但是它不指向任何的变量,所以它是没有地址的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 21:35 , Processed in 0.249238 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表