请问c++如何追加分配空间,比如开始为字符串str[]分配了5个char,如何使其变为10个char

nol 2004-10-17 11:27:37
xiexie
...全文
288 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiguo26 2004-10-18
  • 打赏
  • 举报
回复
vb里面用redim a(大)可以动态实现
c++里,要用string类型类型了
或者,先删除后拷贝
seilfer2000 2004-10-18
  • 打赏
  • 举报
回复
建立一个10个字符的字符串,将原来的5个字符拷贝过来,删除原有的字符串
joyfire 2004-10-18
  • 打赏
  • 举报
回复
标准stl库的string
ftkghost 2004-10-18
  • 打赏
  • 举报
回复
void *realloc( void *memblock, size_t size ); (stdlib.h或malloc.h中)
重新分配存储器块,若成功则返回指向该存储器块的指针,否则返回NULL

下面的代码中内存区域buffer的大小从存放5个char改为能存放10个char:
并且原来的5个char不改变
#include<iostream>
#include<malloc.h>

int main()
{
char* buffer;
buffer=(char*)malloc(5*sizeof(char)); //注意:下面用realloc函数其中申请空间也是用malloc的所以这里不应该用new;而且下面应该用free来释放空间
buffer[0]='a';
buffer[1]='b';
buffer[2]='c';
buffer[3]='d';
buffer[4]=' ';
std::cout<<buffer<<std::endl;
buffer=(char*)realloc(buffer,10 * sizeof(char));
buffer[5]='e';
buffer[6]='f';
buffer[7]='g';
std::cout<<buffer<<std::endl;
free(buffer);
system("Pause");
return 0;
}

但是如果一开始如果是char buffer[5];我就不知道怎么弄了,听高手怎么说
game_zhang 2004-10-18
  • 打赏
  • 举报
回复
保存原来的!
申请大空间!
再复制回去!
zhanghk 2004-10-18
  • 打赏
  • 举报
回复
这要看你怎么实现了,参考一下MFC的CString
whoho 2004-10-18
  • 打赏
  • 举报
回复
如果使用char[],没有什么办法可以达到,除非:
char buf[5];
char *pt=new char[10];
memcpy(pt, buf, 5);
然后用pt
如果使用new char[],那就 这样
char *buf = new char[5];
...
char *pt = buf;
buf = new char[10];
memcpy(buf, pt, 5);
delete[]pt;

如果上述不是char 或者其他内置类型,memcpy改成
std::copy
xuzheng318 2004-10-18
  • 打赏
  • 举报
回复
感觉 seilfer2000(郁闷,疯狂学习中) 方法很好实现,又容易理解
支持!
pc2s 2004-10-18
  • 打赏
  • 举报
回复
楼主是不是想问C++里面如何实现C中的realloc()?
nickshen 2004-10-18
  • 打赏
  • 举报
回复
如果是指针型的,就是要你分配个大内存,将你原来内容拷贝过来,然后删除原来的内存
动态分配类型如string,carray,vector等实际上本质和上面都是一样的,只不过用户用的方便些,所以支持动态分配内存的动态数组,最好也要设大点,不然会降低效率的
carylin 2004-10-18
  • 打赏
  • 举报
回复
可以用string类型啊,它支持动态分配内存:使用成员函数:string::reserve(int)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧