社区
C++ 语言
帖子详情
请问c++如何追加分配空间,比如开始为字符串str[]分配了5个char,如何使其变为10个char
nol
2004-10-17 11:27:37
xiexie
...全文
383
11
打赏
收藏
请问c++如何追加分配空间,比如开始为字符串str[]分配了5个char,如何使其变为10个char
xiexie
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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)
char
*
str
和
char
str
[]的区别
char
str
[]="abcdef",这个数组的存储
空间
是在栈中开辟的,也就是说它的每个元素一次为'a','b','c','\0',将这几个值复制到
str
的位置中。 对于
char
*
str
="abcdef",
str
指向的是静态存储区,"abcdef"是位于常量区的,指针
str
只是指向了这个位置。注意:它与上面的复制不是一回事。既然位于常量区,那么这些值就不能被修改。而上面数组中,要
【
C++
字符串
】
char
*、const
char
*、
char
[]和std::
str
ing
在程序开发中,
字符串
操作是必不可少的功能之一。在众多编程语言中,
C++
对
字符串
有着底层、较良好的支持。本文将介绍4种
字符串
类型使用的方式,并重点讲述std::
str
ing的功能。
深入分析
C++
中
char
*
str
和
char
str
[]的区别
前段时间去阿里云实习生笔试,考了一道要求用递归实现
字符串
反转的问题:输入
char
*
str
="abcedf",打印输出"fedcba"。 我在VS2008平台上编写例程如下: View Code 1 #include "stdafx.h" 2 #include
str
ing.h> 3 4
char
* reverse(
char
*
str
) 5 { 6 int le
字符指针
char
*
str
、字符数组
char
str
[]、(
字符串
)指针数组
char
*
str
[]
#include <stdio.h> #include <stdlib.h> #include <
str
ing.h> int main(void) { /*字符指针*/ /*
字符串
指针变量本身是一个变量,用于存放
字符串
的首地址。而
字符串
本身是存放在以该首地址为首的一块连续的内存
空间
中并以 \0 作为串的结束。*/ //方法一: //
char
*ps = "bcd";//1.
分配
内存给字符指针;2.
分配
内存给
字符串
;3.将字符.
C/
C++
字符串
初始化:
char
、
char
*、
char
[]、new与常量
字符串
的内存模型与最佳实践
字符串
是编程中的基础数据类型,其本质是以空字符结尾的字符序列。在C/
C++
中,
字符串
的不同初始化方式直接决定了数据在内存中的存储位置和访问权限,这关系到程序的内存安全与运行效率。理解内存模型是掌握
字符串
处理的关键,程序运行时内存通常分为代码区、数据区、堆区和栈区等。常量
字符串
存储在只读的代码区,而字符数组通常位于栈区,动态
分配
则使用堆区。从技术价值看,正确的初始化方式能避免内存泄漏、段错误和缓冲区溢出等常见问题。在实际应用场景中,根据
字符串
的只读需求、可修改性、生命周期和性能要求,开发者需要选择合适的方式,
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章