社区
C++ 语言
帖子详情
讨论用字符串:char buf[LEN] = {0}与char *buf =new char[LEN]; 当LEN为多大时需要用后者比较好。
gerry2000
2007-07-13 10:53:42
char buf[LEN] = {0}与char *buf =new char[LEN];
一般小于1k长度时我都喜欢用第一种方式,但现在如果这个LEN长度有2K或25k时, 用第一种方式还好不? 大家一般在 "LEN >= ?" 时用new??
...全文
986
27
打赏
收藏
讨论用字符串:char buf[LEN] = {0}与char *buf =new char[LEN]; 当LEN为多大时需要用后者比较好。
char buf[LEN] = {0}与char *buf =new char[LEN]; 一般小于1k长度时我都喜欢用第一种方式,但现在如果这个LEN长度有2K或25k时, 用第一种方式还好不? 大家一般在 "LEN >= ?" 时用new??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
love_inter_net
2007-07-15
打赏
举报
回复
不错.学习啊!
liuxiuk
2007-07-15
打赏
举报
回复
Y___Y(一叶障目)
你在这也一个星星..?
jinwei1984
2007-07-14
打赏
举报
回复
都系高手!!
lin_style
2007-07-14
打赏
举报
回复
长度还是放在第2因素考虑吧
首先考虑的是使用情况
Y___Y
2007-07-14
打赏
举报
回复
数组不大的情况下,用第一种,第一种的分配效率是第二种的成千上万倍,特别是频繁分配,能用第一种就用第一种
hwkobeliulili
2007-07-14
打赏
举报
回复
恩,学习!!!
星羽
2007-07-14
打赏
举报
回复
char buf[LEN] = {0}是静态数组
char *buf =new char[LEN]; 是动态数组
什么时候用动态数组,什么时候用静态数组?
在你程序运行前就知道数组有多大,用静态数组
在你程序运行过程中才知道数组有多大,用动态数组
动态数组在用setlength设定长度后就相当于静态数组。
函数或过程声明中用动态数组,传递静态数组后动态数组就确定了长度,可以使用,反之,定义的是静态数组,已有确定长度,系统已经为该数组分配了确定大小的内存空间,
---------------------------------------------------------------
设计期已知大小就用静态数组,动态数组大小在运行期根据实际使用大小分配,后者有一定灵活性,但是需要一些更多的管理
---------------------------------------------------------------
补充一:动态数组是一个32位的指针,指向一个内存块,该内存块除保存数组元素的值之外,还在数据块的前面保存了两个32位的整数,一个是动态数组的长度,一个是动态数组的引用计数。静态数据则是一组相邻的变量序列,没有额外的内存保存其他信息。因此,动态数组与静态数组的内在区别是内存管理。
补充二:静态数组的索引范围可以随意,而动态数组的索引总是以0开始。
补充三:楼主所说的参数中的“动态数组”,严格来说是不准确的。
开放数组参数允许不同尺寸的数组传递给相同的过程或函数。要定义含有开放数组参数的例程,需要在参数声明中使用语法array of type(优于array[X..Y] of type)。例如,
function Find(A: array of Char): Integer;
上面声明了一个叫做Find的函数,该函数接受任何尺寸的字符数组并返回一个整数。
注意:开放数组参数的语法类似于动态数组类型,但它们的用途完全不同。上面的例子创建的函数接受任何以字符为元素的数组,包括(但不限于)动态字符数组。要声明必需是动态数组的参数,则需要指定一个类型标识符:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer;
该文章转载自1024k:http://www.1024k.cn/faq/2007/200706/40671.html
MPTD_Fire
2007-07-14
打赏
举报
回复
是呀,能不NEW就尽量不NEW吧,要是NEW的话有很多其他要做的,内存的管理什么的,指针又是比较容易出错的!如果用的好的话,NEW是很好的方式。
lkldiy
2007-07-14
打赏
举报
回复
一般不new的,
gerry2000
2007-07-13
打赏
举报
回复
看来楼上四位把该讲的都讲完了, 呵呵
gerry2000
2007-07-13
打赏
举报
回复
我使用的是HP-UNIX拉
奥爸
2007-07-13
打赏
举报
回复
如果知道长度不会大于1M的话,我一般都是第一种方式.大于1M vc需要设置编译参数
用第二种方式不知道会有多大的时候用第二种,或者需要传递到外面的时候
珍惜生命远离CPP
2007-07-13
打赏
举报
回复
一般不要超过512k因为栈是有限的
不过我也一般用string vector<char>
taodm
2007-07-13
打赏
举报
回复
看你什么操作系统。
不过,我喜欢vector<char>/string
healer_kx
2007-07-13
打赏
举报
回复
嗯,一般来讲我很喜欢你种思路。
大小我一般也是 1024了。
但是此外,是栈是堆,也不是大小的问题啊,更主要取决于你的需要。
yuanchuang
2007-07-13
打赏
举报
回复
数组方便,呵呵
Vitin
2007-07-13
打赏
举报
回复
如果是要用大缓冲区,还是用静态的吧。
static char buf[LEN]; // 不用={0},static已经初始化为0了
栈和堆都是给动态数据使用的。堆效率低,它的意义主要体现在未知资源需求的情况(如未知运行期需要多少内存资源时)。栈效率高,它的意义主要体现在程序行进中的状态保留和少量资源的快速取用(如活动记录和局部变量),因为它使用周期短、重用度高,所以一般设置比较小的值即可,从而最大程度上节省资源。
固定尺寸的缓冲区(特别是比较大、且经常使用的)还是适合用静态分配的。当然,如果是不定尺寸的缓冲区(往往是为了节约有限的资源),那么还是用堆分配吧:根据实际需要在运行期分配,以时间来换取空间。
linux_is_perfect
2007-07-13
打赏
举报
回复
char buf[LEN] = {0}与char *buf =new char[LEN]; ]
这样的话不如这样写
char * const buf = new charr[len];
记得new 出来的内存是得自己delete掉的
需要不同,用不同的方法
大家共同提高...
BenjaminHuang
2007-07-13
打赏
举报
回复
堆上的内存是动态地通过操作系统去申请的,大小的限制和当前可用的物理内存有密切关系,而栈内存是编译时决定的,可以从编译器或者链接器的选项中去指定,运行时是有限的,这个或许我在说废话了,大家都知道。
如果是实时性要求比较高的环境,函数的调用会很频繁,栈内存是相当宝贵的,但另一方面要申请堆空间的话,相对来说会比较花CPU时间。所以我觉得这样的情况不妨结合当前编译指定的栈的大小和同一时间会被调用的函数数量去考虑。
gerry2000
2007-07-13
打赏
举报
回复
我比较赞同这两句话, :-)
Inhibitory() ( )
char buf[LEN] = {0}这种变量在同一个作用域中多不多,如果太多的话,可以考试用后一种,如果少的话,而且生命周期不是太长,用第一种省事一些,也免得不小心搞出个内存泄漏。
healer_kx(甘草-http://healerkx.spaces.live.com/)
我的原则是能不new就不new... ...
加载更多回复(7)
去掉文本中的空格与换行
可以去掉 空格和 换行 void CMainFrame::OnTrim() { FILE *pfile=fopen("a.txt","r+"); //CString strin("s"); //fwrite(strin,1,1,pfile); fseek(pfile,0,SEEK_END); int
len
=ftell(pfile);
char
*
buf
;
buf
=
new
char
[
len
+1]; memset(
buf
,0,
len
+1); fseek(pfile,0,SEEK_SET); fread(
buf
,1,
len
,pfile); //
buf
="ergergergergerg"; CString str(
buf
); for(int i=0;i<
len
;i++) { if(
buf
[i]==' '||
buf
[i]=='\r'||
buf
[i]=='\n') { for(int j=i;j<
len
;j++) {
buf
[j]=
buf
[j+1]; } i--;
len
--; } } FILE*pfilea1=fopen("a1.txt","w+"); int real=fwrite(
buf
,1,
len
,pfilea1); fclose(pfile); fclose(pfilea1); MessageBox(str);
字符串
操作_
Char
&String
一、
char
字符串
表达形式 1.
char
buf
[128] 2.
char
* p =
buf
3.
字符串
常量 const
char
* p = “hello” **备注:**
char
以0结尾! 二、
字符串
遍历 int ergodic(const
char
* str) { for(int =0; ; ...
CString 与
char
* 类型互相转换
在进行MFC 开发的时候避免不了用到CString 与
char
* 类型互相转换,网络上提供许多方法,但是我觉得以下方式在转换的过程中
比较
安全,所以写出来方便大家参考,与人方便,与己方便。 1、CString 转
char
*
char
* CImagePro::CstringTo
Char
(CString str) { /*
char
*
buf
=
new
char
[10];*/ int
len
=...
char
[]越界问题
c语言里面
字符串
结束符’\0’的值就是0,所以
buf
[
buf
_
len
] = 0相当于
buf
[
buf
_
len
] = ‘\0’; const int
buf
_
len
=1024;
char
buf
[
buf
_
len
+1];
buf
[
buf
_
len
]=0; //这样就没越界 const int
buf
_
len
=1024;
char
buf
[
buf
_
len
];
buf
[
buf
_
len
]=0; //这样就越界了 ...
Leetcode 合法
字符串
判定
解析
字符串
str是否合法的C语言
字符串
字面值定义(不考虑八进制和十六进制字符编码),如果是,则将解码后的内容保存到
buf
中,并返回0,否则返回-1。比如,"hello \"sangfor\""解码后结果为hello "sangfor"。 【思路】 该题
需要
研究给定的
字符串
是否可以在编程语言中为合法
字符串
: 合法:
char
* str="abcd\"d\\"; 其真正表达的串为:abcd"d\ 核心关键点: ①首尾必须以双引号包含: 不合法:
char
* str="abcd\"d;
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章