免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1970 | 回复: 8
打印 上一主题 下一主题

一个小问题,关于new的空间分配问题。(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-01 10:56 |只看该作者 |倒序浏览
  1.        
  2.         char  * source = "HelloWorld";
  3.         int i = strlen(source);
  4.         cout << i <<endl;
  5.         char * target;
  6.         target = new char [i];
复制代码


就是这样的分配给target的空间应该是多少啊?
如果我想分配给target和source相同的空间,应该是如何操作那?

小弟很菜菜,谢谢DX解答啦。

[ 本帖最后由 xingyun321 于 2006-9-1 11:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-01 11:00 |只看该作者
10
i+1

论坛徽章:
0
3 [报告]
发表于 2006-09-01 11:04 |只看该作者
先谢谢楼上,不过为什么我用       
int j = strlen(target);
cout << j <<endl;
得出j的值是17啊?就算用了i+1之后值也是一样的那?

论坛徽章:
0
4 [报告]
发表于 2006-09-01 11:05 |只看该作者
整体的程序是这样子的:

  1. // This is the main project file for VC++ application project
  2. // generated using an Application Wizard.

  3. #include "stdafx.h"
  4. #include <iostream>
  5. using namespace std;
  6. #using <mscorlib.dll>
  7. using namespace System;

  8. int strcopy(char * source, char * target);
  9. int _tmain(int argc, char ** argv)
  10. {
  11.        
  12.         char  * source = "HelloWorld";
  13.         int i = strlen(source);
  14.         cout << i <<endl;
  15.         char * target;
  16.         target = new char [i+1];
  17.        
  18.         int j = strlen(target);
  19.         cout << j <<endl;
  20.         int error;
  21.         if ((error = strcopy(source,target)) >= 0)
  22.         {
  23.                 cerr << "copy success" <<error<<endl;
  24.         }
  25.         cout << "target is:" << target <<endl;
  26.         delete [] target;
  27.         return 0;
  28. }


  29. int strcopy(char * source, char * target)
  30. {
  31.         int position = 0;
  32.         while ( source[position] != '\0')
  33.         {
  34.                 target[position] = source[position];
  35.                 position ++;
  36.         }
  37.         return position;
  38. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-09-01 11:10 |只看该作者
strcopy有问题.

论坛徽章:
0
6 [报告]
发表于 2006-09-01 11:10 |只看该作者
你没搞懂用i+1的目的,多加的那个1的位置上的字符要设置为'\0'

噢,不好意思,开始没看到代码
你拷贝的时候那个\0没有拷贝走

[ 本帖最后由 slay78 于 2006-9-1 11:13 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-09-01 11:17 |只看该作者
在strcopy后面加上了target[position] = '\0';确实解决了后面出现乱码的问题,谢谢楼上几位了。

不过我还是不明白为什么new出来的空间要比原来的预计的大那?为什么不是"helloworld"的11个字符的空间那?

论坛徽章:
0
8 [报告]
发表于 2006-09-01 11:21 |只看该作者
哪有比原来的大,你能用的还是只有那11个,后面的你要用了指不定什么时候就出错
strlen判断长度是根据找到第一个0字符,如果你那一大片内存都没有0,你得出的长度可能不是17,
几千几万都有可能

论坛徽章:
0
9 [报告]
发表于 2006-09-01 11:22 |只看该作者
哦,终于明白了,,谢谢啦!我说这个值怎么还是不定的那!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP