如何在C中获取动态分配的数组的长度?
我试过了:
sizeof(ptr)
sizeof(ptr + 100)
他们没有工作。
答案 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)