获取C中动态分配的数组的长度

时间:2011-02-26 10:29:12

标签: c

  

可能重复:
  length of array in function argument

如何在C中获取动态分配的数组的长度?

我试过了:

sizeof(ptr)
sizeof(ptr + 100)

他们没有工作。

4 个答案:

答案 0 :(得分:23)

你做不到。您必须将长度作为参数传递给您的函数。指针的大小是包含地址的变量的大小,这是您找到的4(32位地址空间)的原因。

答案 1 :(得分:5)

由于malloc只返回一块内存,你可以在块中添加额外信息,告诉数组中有多少元素,如果你不能添加一个告诉数组大小的参数,那就是一种方法

e.g。

char* ptr = malloc( sizeof(double) * 10 + sizeof(char) );
*ptr++ = 10;
return (double*)ptr;

假设您可以在PHP中读取数组,这是一种我不熟悉的语言。

答案 2 :(得分:2)

在这里你可以看到C的危险:ptr只是指向内存而无法知道假设的大小是多少。你可以增加和增加,操作系统最终可能会抱怨,或者你的程序崩溃,或者破坏其他程序。你应该总是指定大小,并自己检查边界!

答案 3 :(得分:1)