首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于char类型定义问题 [已结贴,结贴人:Inter_Ares]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Inter_Ares
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-21 17:31:24 楼主
    本人初学C++,想在这里问个问题
    char *dd = new char[10];
    strcpy(dd,"123456789");

    char dd[] = "123456789";有什么区别?
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lionc650
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:32:341楼 得分:5
    后者多一个 '\0'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahua010
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:33:262楼 得分:5
    char *dd = new char[10];
    strcpy(dd,"123456789");
    这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789";
    这种方式 dd开辟的空间在栈上,由栈去管理这块内存
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lionc650
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:35:113楼 得分:0
    哦。。错了, ls才是正解。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xqls_xqls
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:36:314楼 得分:0
    引用 2 楼 dahua010 的回复:
    char *dd = new char[10];
    strcpy(dd,"123456789");
    这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789";
    这种方式 dd开辟的空间在栈上,由栈去管理这块内存
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Inter_Ares
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:37:305楼 得分:0
    难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
    何解?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:38:006楼 得分:0
    前者动态分配内存后者静态分配,前者用完后要自己释放,后者程序结束时自动释放
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:38:537楼 得分:0
    引用 5 楼 Inter_Ares 的回复:
    难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
    何解?

    有时必须动态分配
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Inter_Ares
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:39:528楼 得分:0
    能否举个简单的例子?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • weiyijiji
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:41:079楼 得分:0
    除2楼说的外
    1定义1个指针和1个内存空间(大小为10个字节)
    2定义了1个数组,初始化么定义数组大小,可根据sizeof(dd)/sizeof(dd[0])计算
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahua010
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:41:2810楼 得分:0
    引用 8 楼 Inter_Ares 的回复:
    能否举个简单的例子?


    写一个可以给指针开辟空间的函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sukyin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:41:4811楼 得分:5
    引用 5 楼 Inter_Ares 的回复:
    难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
    何解?


    用new的好处就是可以动态分配。比如你想分配len长度的字符串,但是len可能来自别的地方。你并不知道有多少内存需要。这个时候char dd[len]就不能用了。只能用new分配len长的内存了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:41:5712楼 得分:0
    呵呵~~各有各的优点~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • PenglueR
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:50:3813楼 得分:5
    引用 4 楼 xqls_xqls 的回复:
    引用 2 楼 dahua010 的回复:
    char *dd = new char[10];
    strcpy(dd,"123456789");
    这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789";
    这种方式 dd开辟的空间在栈上,由栈去管理这块内存

    还要补充点就是
    上面是动态分配空间  需配上delete[]
    strcpy()属函数调用 后面是赋值会多一个'\0'
    例子嘛,你可以随便调试一个简单程序
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hmsuccess
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:50:5014楼 得分:2
    引用 2 楼 dahua010 的回复:
    char *dd = new char[10];
    strcpy(dd,"123456789");
    这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789";
    这种方式 dd开辟的空间在栈上,由栈去管理这块内存

    dd是在栈上,而“123456789\0”实在常量区
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Who_know_me
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:51:2415楼 得分:0
    涉及到了堆和栈的问题了~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • synix521
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:54:1516楼 得分:0
    引用 14 楼 hmsuccess 的回复:
    引用 2 楼 dahua010 的回复:
    char *dd = new char[10];
    strcpy(dd,"123456789");
    这种方式 dd开辟的空间在堆上,需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789";
    这种方式 dd开辟的空间在栈上,由栈去管理这块内存

    dd是在栈上,而“123456789\0”实在常量区
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solaker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:01:4317楼 得分:3
    char *dd = new char[10]; 需要自己手动去释放,不然就会造成内存泄露。
    char dd[] = "123456789"; 不需要自己手动去释放
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FgYg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:28:2718楼 得分:0
    一个堆。一个栈咯。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whuyotc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 22:05:1119楼 得分:0
    学知识了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rockti
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 22:16:1220楼 得分:5
    引用 5 楼 Inter_Ares 的回复:
    难道真的只有这点区别,那都用char dd[] = "123456789"; 这种形式好了,用new还有可能造成内存泄漏。
    何解?

    当你知道字符串值的时候确实可以直接赋初值。但是很多时候你根本不知道字符串大小,或者要作为参数传给别人。当然一般作为局部变量的话建议:char dd[256]="".然后保证字符串长度小于256,进行操作。
    new 的话是在堆上操作,除非数据比较特殊或者比较大,一般简单字符串没有必要。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Inter_Ares
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:20:0821楼 得分:0
    学到东西了,结贴了。没想到引来这么多高手进来讨论,分不够分的了。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved