首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么获取new出来的字符串的大小

2012-02-08 
如何获取new出来的字符串的大小?比如:char*snewchar[8]我该如何获取他的大小?sizeof(s)获取的是指针的大

如何获取new出来的字符串的大小?
比如:
char*   s   =   new   char[8];

我该如何获取他的大小?
sizeof(s)   获取的是指针的大小,永远是4字节
谢谢

[解决办法]
你new的时候肯定给了个长度吧
记录他
[解决办法]
无法获得

VS系列或许有_msize();
[解决办法]
Returns the size of a memory block allocated in the heap.

size_t _msize(
void *memblock
);
Parameter
memblock
Pointer to memory block.
Return Value
_msize returns the size (in bytes) as an unsigned integer.

Remarks
The _msize function returns the size, in bytes, of the memory block allocated by a call to calloc, malloc, or realloc.

When the application is linked with a debug version of the C run-time libraries, _msize resolves to _msize_dbg. For more information about how the heap is managed during the debugging process, see The CRT Debug Heap.


[解决办法]
你new 的时候就给他配个长度
[解决办法]
new的时候就保存着。
另外,用vector就彻底没这个烦恼了。

[解决办法]
char* s = new char[8];

这样申请的内存,一般以FDFDFDFD开头和结束,只要通过s向后找到FDFDFDFD,就是这块内存的结尾。当然了前提是你没有把s后面的内存特意的修改为FDFDFDFD。

[解决办法]
new的实现是有编译器自己决定的,并且它肯定再分配的内存中保存了大小信息(从而让delete知道释放多少内存)。但是C++标准并没有规定实现方法,也没有要求返回new的大小。因此,只能使用各个编译器(可能)提供的接口,而这些接口是不能移植的(所以VS的接口_msize前加了一个_)。所以,请尽量不要使用它们。如果你必须随时知道一个new的长度,那么就再调用new时把长度记录下来,并且以后跟着你得到的char*指针一起走,保证随时访问。这就是为什么许多C函数在用字符串时传递两个参数,它的头指针和它的长度。
总之,以各编译器特有的方式获得堆分配内存的大小是不推荐的方法。既然使用new和delete,承认它们提供的抽象性,就不要再与实现细节耦合再一起了。

热点排行