首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
C/C++
C++ 语言
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
关于char类型定义问题
[已结贴,结贴人:Inter_Ares]
加为好友
发送私信
在线聊天
Inter_Ares
等级:
可用分等级:
贫农
总技术分:
1
总技术分排名:
296708
揭贴率:
100.00%
发表于:
2008-08-21 17:31:24
楼主
本人初学C++,想在这里问个问题
char *dd = new char[10];
strcpy(dd,"123456789");
跟
char dd[] = "123456789";有什么区别?
问题点数:
30
回复次数:
21
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lionc650
coder
等级:
可用分等级:
富农
总技术分:
1473
总技术分排名:
14042
发表于:
2008-08-21 17:32:34
1
楼 得分:
5
后者多一个 '\0'
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dahua010
平淡
等级:
可用分等级:
中农
总技术分:
920
总技术分排名:
20634
发表于:
2008-08-21 17:33:26
2
楼 得分:
5
char *dd = new char[10];
strcpy(dd,"123456789");
这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789";
这种方式 dd开辟的空间在栈上,由栈去管理这块内存
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lionc650
coder
等级:
可用分等级:
富农
总技术分:
1473
总技术分排名:
14042
发表于:
2008-08-21 17:35:11
3
楼 得分:
0
哦。。错了, ls才是正解。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
xqls_xqls
小桥流水
等级:
可用分等级:
中农
总技术分:
695
总技术分排名:
26433
发表于:
2008-08-21 17:36:31
4
楼 得分:
0
引用 2 楼 dahua010 的回复:
char *dd = new char[10];
strcpy(dd,"123456789");
这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789";
这种方式 dd开辟的空间在栈上,由栈去管理这块内存
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Inter_Ares
等级:
可用分等级:
贫农
总技术分:
1
总技术分排名:
296708
发表于:
2008-08-21 17:37:30
5
楼 得分:
0
难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
何解?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lzr4304061988012
自来也大人
等级:
可用分等级:
中农
总技术分:
1558
总技术分排名:
14942
发表于:
2008-08-21 17:38:00
6
楼 得分:
0
前者动态分配内存后者静态分配,前者用完后要自己释放,后者程序结束时自动释放
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lzr4304061988012
自来也大人
等级:
可用分等级:
中农
总技术分:
1558
总技术分排名:
14942
发表于:
2008-08-21 17:38:53
7
楼 得分:
0
引用 5 楼 Inter_Ares 的回复:
难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
何解?
有时必须动态分配
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Inter_Ares
等级:
可用分等级:
贫农
总技术分:
1
总技术分排名:
296708
发表于:
2008-08-21 17:39:52
8
楼 得分:
0
能否举个简单的例子?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
weiyijiji
啊飞
等级:
可用分等级:
富农
总技术分:
1032
总技术分排名:
21770
发表于:
2008-08-21 17:41:07
9
楼 得分:
0
除2楼说的外
1定义1个指针和1个内存空间(大小为10个字节)
2定义了1个数组,初始化么定义数组大小,可根据sizeof(dd)/sizeof(dd[0])计算
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dahua010
平淡
等级:
可用分等级:
中农
总技术分:
920
总技术分排名:
20634
发表于:
2008-08-21 17:41:28
10
楼 得分:
0
引用 8 楼 Inter_Ares 的回复:
能否举个简单的例子?
写一个可以给指针开辟空间的函数
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
sukyin
寒冰
等级:
可用分等级:
中农
总技术分:
2164
总技术分排名:
9840
发表于:
2008-08-21 17:41:48
11
楼 得分:
5
引用 5 楼 Inter_Ares 的回复:
难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
何解?
用new的好处就是可以动态分配。比如你想分配len长度的字符串,但是len可能来自别的地方。你并不知道有多少内存需要。这个时候char dd[len]就不能用了。只能用new分配len长的内存了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hqin6
!独行
等级:
可用分等级:
中农
总技术分:
6084
总技术分排名:
4073
发表于:
2008-08-21 17:41:57
12
楼 得分:
0
呵呵~~各有各的优点~
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
PenglueR
LongeR
等级:
可用分等级:
长工
总技术分:
222
总技术分排名:
59344
发表于:
2008-08-21 17:50:38
13
楼 得分:
5
引用 4 楼 xqls_xqls 的回复:
引用 2 楼 dahua010 的回复:
char *dd = new char[10];
strcpy(dd,"123456789");
这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789";
这种方式 dd开辟的空间在栈上,由栈去管理这块内存
还要补充点就是
上面是动态分配空间 需配上delete[]
strcpy()属函数调用 后面是赋值会多一个'\0'
例子嘛,你可以随便调试一个简单程序
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hmsuccess
等级:
可用分等级:
富农
总技术分:
5185
总技术分排名:
4225
发表于:
2008-08-21 17:50:50
14
楼 得分:
2
引用 2 楼 dahua010 的回复:
char *dd = new char[10];
strcpy(dd,"123456789");
这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789";
这种方式 dd开辟的空间在栈上,由栈去管理这块内存
dd是在栈上,而“123456789\0”实在常量区
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Who_know_me
未知
等级:
可用分等级:
贫农
总技术分:
15
总技术分排名:
232531
发表于:
2008-08-21 17:51:24
15
楼 得分:
0
涉及到了堆和栈的问题了~~
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
synix521
不懂C++
等级:
可用分等级:
短工
总技术分:
24
总技术分排名:
167879
发表于:
2008-08-21 17:54:15
16
楼 得分:
0
引用 14 楼 hmsuccess 的回复:
引用 2 楼 dahua010 的回复:
char *dd = new char[10];
strcpy(dd,"123456789");
这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789";
这种方式 dd开辟的空间在栈上,由栈去管理这块内存
dd是在栈上,而“123456789\0”实在常量区
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
solaker
等级:
可用分等级:
贫农
总技术分:
18
总技术分排名:
234890
发表于:
2008-08-21 18:01:43
17
楼 得分:
3
char *dd = new char[10]; 需要自己手动去释放,不然就会造成内存泄露。
char dd[] = "123456789"; 不需要自己手动去释放
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
FgYg
死鱼飞飞
等级:
可用分等级:
短工
总技术分:
88
总技术分排名:
113169
发表于:
2008-08-21 18:28:27
18
楼 得分:
0
一个堆。一个栈咯。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
whuyotc
该用户很懒,没有设置昵称
等级:
可用分等级:
乞丐
总技术分:
152
总技术分排名:
76432
发表于:
2008-08-21 22:05:11
19
楼 得分:
0
学知识了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
rockti
怀念羊
等级:
可用分等级:
贫农
总技术分:
44
总技术分排名:
147733
发表于:
2008-08-21 22:16:12
20
楼 得分:
5
引用 5 楼 Inter_Ares 的回复:
难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
何解?
当你知道字符串值的时候确实可以直接赋初值。但是很多时候你根本不知道字符串大小,或者要作为参数传给别人。当然一般作为局部变量的话建议:char dd[256]="".然后保证字符串长度小于256,进行操作。
new 的话是在堆上操作,除非数据比较特殊或者比较大,一般简单字符串没有必要。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Inter_Ares
等级:
可用分等级:
贫农
总技术分:
1
总技术分排名:
296708
发表于:
2008-08-22 10:20:08
21
楼 得分:
0
学到东西了,结贴了。没想到引来这么多高手进来讨论,分不够分的了。
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友