char指针c ++的长度

时间:2012-10-05 15:43:02

标签: c

  

可能重复:
  How to find the sizeof(a pointer pointing to an array)

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

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

char a[10];
a[0]='c';
cout << sizeof(a) / sizeof(a[0]);
如果我尝试使用字符指针

,那么

会产生10.

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

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

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

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

2 个答案:

答案 0 :(得分:6)

SomeRandomGuyOnSO:

  

不,不是。

我:

  

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

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

// OS X
#include <malloc/malloc.h>

char *buf = malloc(1024);
size_t howManyBytes = malloc_size(buf);
printf("Allocated %u bytes\n", (unsigned)howManyBytes);

// Linux
#include <malloc.h>

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或更高。

答案 1 :(得分:2)

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