char指针的长度c ++

可能重复:
如何找到sizeof(指向数组的指针)

例如,使用malloc声明char指针时。 有没有办法确定分配的长度。

例如,如果我定义一个char数组,我可以很容易地找到元素的数量

char a[10]; a[0]='c'; cout << sizeof(a) / sizeof(a[0]); 

如果我尝试使用char指针,那么会产生10.

 char *a; a = (char*)malloc(10); a[0] = 'c'; cout << sizeof(a) / sizeof(a[0]); 

然后它产生8,这显然是指针的大小,而不是分配的长度。

是否有可能找到char指针的分配长度?

我问这个而不是使用std :: string或其他的原因是因为我在解决一些面试问题时遇到了这个问题。 出于好奇心

SomeRandomGuyOnSO:

不,这不对。

我:

是的,它是,但它将是非标准和平台依赖。

除此之外,让我不要重复使用标准C ++容器的所有好建议; 让我实际上回答你的问题。 对该主题进行快速Google搜索会带来执行此操作的方法。 例子:

 // OS X #include  char *buf = malloc(1024); size_t howManyBytes = malloc_size(buf); printf("Allocated %u bytes\n", (unsigned)howManyBytes); // Linux #include  char *buf = malloc(1024); size_t howManyBytes = malloc_usable_size(buf); printf("Allocated %u bytes\n", (unsigned)howManyBytes); // Windows, using CRT char *buf = malloc(1024); size_t howManyBytes = _msize(buf); printf("Allocated %u bytes\n", (unsigned)howManyBytes); 

所有三个片段都应该打印1024或更高。

malloc()并不真正了解数组或其他东西,它只是为你分配一块内存。 除非您单独跟踪,否则您无法使用此空间的大小。 这就是为什么大多数作用于数组的方法都有两个参数,即数组和长度。