傻了:new出来的数组,如何计算它的大小?sizeof么,进来看看。。。

jiansee 2002-08-20 01:48:53
AnsiString Str1 = "abcde12345";
char *tt = new char[Str1.Length() + 1];
strcpy(tt, Str1.c_str());
Edit1->Text = IntToStr(sizeof(tt)); //不论Str1内容为何,此处始终为4
delete [] tt;
本来是想求出new出来的char数组占用多少字节,难道这样用sizeof只能算出数组指针本身的大小?那么如何求整个数组的大小呢?而下面的代码却是对的:
char Str2[] = "abcde12345";
Edit2->Text = IntToStr(sizeof(Str2)); //此处就返回11
...全文
940 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiansee 2002-08-21
  • 打赏
  • 举报
回复
我主要是想看看sizeof 的用法,大小是new之前就知道的

谢谢各位,结贴~~~
NowCan 2002-08-20
  • 打赏
  • 举报
回复
什么意思啊?new的时候你自己不知道大小吗?那怎么new出来呀?
szbug 2002-08-20
  • 打赏
  • 举报
回复
楼上两位说得很对,所以要分清指针还是数组,所以用new动态申请如果需要知道大小的话,只能自己记住,编译器不会帮你记的。
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
因为你的数组是动态生成,所以得到的是指针的长度.如果数组是静态,则可以得出数组的大小,即是说:
char buffer[512];
ShowMessage(sizeof(buffer));//显示512
而:
char *buffer=new char[512];
ShowMessage(sizeof(buffer));//显示4。
jishiping 2002-08-20
  • 打赏
  • 举报
回复 2
数组可以用sizeof来得到它的大小,但是如果是指针,就不能使用sizeof来得
到大小。因为数组再定义时,已经指明了它的大小,所以编译器可以知道它的
实际大小,而对一个指针来说,由于是动态分配的内存,编译器怎么知道它的
大小呢?所以不能对指针用sizeof来得到分配的内存大小,此时用sizeof得到
的仅仅是指针占用的内存字节数。对Win32程序来说,指针占用4个字节。
耙子 2002-08-20
  • 打赏
  • 举报
回复
你注意到了吗?
char str[]= "";

char *tt;
他们虽然都实际上是指针,但是一个有大小一个没大小的。
sizeof(str) 返回的是字符数组的大小,因为你开始就定义了大小。
sizeof(tt)返回的是指针的大小。
这个是编译器定义的,没有为什么。

这个和编译器有关系,很多文章不提倡使用sizeof的原因就是因为这个sizeof在不同的编译器上结果不同。
steventg 2002-08-20
  • 打赏
  • 举报
回复
Edit1->Text = IntToStr(strlen(tt));

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧