关于C语言空间开辟的2个问题:

C语法知识问题:===========问题1:(怎么在已有空间中连续的开辟空间)问题具体描述:比如char*p;假设他指向的空间从0x12ff48到0x12ff5e.那么... C语法知识问题:
===========
问题1:
(怎么在已有空间中连续的开辟空间)
问题具体描述:
比如char *p;
假设他指向的空间从0x12ff48到0x12ff5e.那么我要一段数据,正好从0x12ff5f开始,
到0x12ff67,那么,我该怎么开辟空间???
========
问题2:
(消除数组空间)
问题具体描述:
比如char p[20];
然后我在函数中引用其地址 _string( &p,&string),打算把string的数据p放入起来;
但是,string的数据过大,于是我在_string函数里malloc一个 _p,存放了string,并
且返回了 _p,然后再main中用一个新定义的聚合类型接受了数据,那么,在main
中怎么消除 p所占用的空间?
=====================
望解释,谢谢 !!!
展开
 我来答
feigexiaya
2012-11-16
知道答主
回答量:14
采纳率:0%
帮助的人:9.3万
展开全部
楼主你的表述能力,让人有点拙计。
问题1:你也说了,那段空间已经被分配给了p,那么无论你再怎么申请空间,那个空间都不会再给你了,如果你想获得其中的数据。你只需要知道你要的数据位置,和那段地址的首地址的偏移即可。将那段地址的首地址取出,然后++偏移大小,达到目的。
问题2:如果你不要p占用空间,那么很简单。
直接声明char *p;然后给函数传入p的地址。函数中对p操作。mollac给p开辟和string长度+1大小一致的空间,然后strncpy即可。不需要返回值。用完p,直接free。
请给分,谢谢
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
secondhero
2012-11-16 · 超过14用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:28.5万
展开全部
问题1。系统开辟空间并不是你想的那样,系统只是检测到这个空间可用,就会连续存放数据。指针的具体地址你是无法指定的,只能指定指针的指向,也就是指向的变量的地址。
问题2。消除P的空间可以用析构函数~而且,这是系统自动调用的。不用你操心。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liky_2000
2012-11-15 · TA获得超过273个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:156万
展开全部
问题1:
你是想做多进程共享内存吗?
mmap函数可以指定映射的地址,但是实际地址以它的返回值为准,未必就是你指定的

问题2:
p是栈内存,不需要消除它的空间的,程序退出自动释放。

但是,你这个_string的实现很奇怪,你没有把p的长度传经去,你怎么判断p无法存放string的数据?
更多追问追答
追问
首先,关于问题2:我假设发现已经写了一个int stringlength(const char *p)来判断字符串的长度,然后在 _string函数里做了一个判断,if(string的长度大于p){ 用malloc开辟stringlength(string)长度的char型空间,分配给_p,并且 return _p} else{正常的复制p到string},但是问题在于,如果符合if条件,我该怎么做,才能防止内存溢出!我想的是在main中分派一个数组a接收_p,但由于string写代码时未定,所以不知道a有多大,纠结了
追答
  1. malloc不存在溢出的问题,只要你空余内存足够就可以。

  2. 你的stringlength不可能准的,假设你在外面预分配了字符数组p[1024],然后只拷贝2个字符进去,你在stringlength函数里判断p的长度是2,因为string的长度是100,又另外malloc 100个字节再返回,这简直是白干的。

  3. a的长度未知,你就运行是判断string的长度,然后malloc就可以了,有什么好纠结的。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式