返回数组大小的C总是返回相同的错误答案
在C中,我在内存中为x数量的y结构分配空间(请参见下面的代码),并返回此内存区域,以便与另一个.C源文件及其函数一起使用 一旦我将分配的内存传递给另一个函数,内存的实际内容就可以正确访问,但是当我想返回传递给函数的结构数量时,它总是返回4 在下面的代码中,我显示了结构的数量是37,但数组的大小返回为4 “数组”确实按照预期正确地填充了所有37个元素,但我不明白为什么它总是说长度为4 我是C新手,所以我可能会错过一些明显的东西 locof是一个文件名,它不是空的,并且文件已正确打开 代码: 这将打印出:返回数组大小的C总是返回相同的错误答案,c,arrays,pointers,C,Arrays,Pointers,在C中,我在内存中为x数量的y结构分配空间(请参见下面的代码),并返回此内存区域,以便与另一个.C源文件及其函数一起使用 一旦我将分配的内存传递给另一个函数,内存的实际内容就可以正确访问,但是当我想返回传递给函数的结构数量时,它总是返回4 在下面的代码中,我显示了结构的数量是37,但数组的大小返回为4 “数组”确实按照预期正确地填充了所有37个元素,但我不明白为什么它总是说长度为4 我是C新手,所以我可能会错过一些明显的东西 locof是一个文件名,它不是空的,并且文件已正确打开 代码: 这将打
number of lines = 37
size : 4
我是不是错过了一些显而易见的东西
谢谢,
Chris。您忽略了一个事实(显而易见,但当然您必须首先知道这一点),malloc()
执行的动态内存分配只是指向第一个元素的指针
无法从结果指针计算分配的大小。malloc()
的内部(也许)已经知道了,但是没有办法从外部找出答案
因此,您的代码是正确的,但您的期望是错误的。您忽略了一个事实(显而易见,但当然您必须首先知道),即由malloc()
执行的动态内存分配只会成为指向第一个元素的指针
无法从结果指针计算分配的大小。malloc()
的内部(也许)已经知道了,但是没有办法从外部找出答案
因此,您的代码是正确的,但您的期望是错误的。sizeof(assets)
返回指针的大小,而不是数组大小。您需要变量来记住大小
size_t size = sizeof (rescue_asset) * no_of_lines; // size_t is from stddef.h
assets = malloc(size);
printf("size : %zu \n", size); // %zu is for size_t type
sizeof(assets)
返回指针的大小,而不是数组大小。您需要变量来记住大小
size_t size = sizeof (rescue_asset) * no_of_lines; // size_t is from stddef.h
assets = malloc(size);
printf("size : %zu \n", size); // %zu is for size_t type
assets
只是一个指针如果你malloc
,你应该知道大小。但是我在中使用的“数组”大小的文件不知道malloc值(没有行),我可以传递它,但是它从3个不同的c文件中获取“数组”,所以可能有点混乱。有更好的方法吗?i、 有没有办法返回malloc的大小?对于这些愚蠢的问题,很抱歉,来自Java C的问题一开始让人困惑。在某些情况下,数组以空值终止,表示数组的结束。如果不是这样,那么任何接受数组的函数都需要一个额外的size
参数。assets
只是一个指针如果你malloc
,你应该知道大小。但是我在中使用“数组”大小的文件不知道malloc值(没有行)我可以传递它,但它需要“数组”来自3个不同的c文件,所以可能有点混乱。有更好的方法吗?i、 有没有办法返回malloc的大小?对于这些愚蠢的问题,很抱歉,来自Java C的问题一开始让人困惑。在某些情况下,数组以空值终止,表示数组的结束。如果不是这样,那么任何接受数组的函数都需要一个额外的size
参数!那么,我如何循环从指针第一个元素到它的最后一个元素,而指针+1!=空?s/没有方法/没有可移植的方法/。有些实现可能会提供一种查询分配大小的方法,但正如所说的,这是不可移植的。啊,我明白了!那么,我如何循环从指针第一个元素到它的最后一个元素,而指针+1!=空?s/没有方法/没有可移植的方法/。一些实现可能提供一种查询分配大小的方法,但正如所说的,这是不可移植的。我明白了!谢谢完全理解马洛克小姐@不,您完全误解了打印数组的大小。@不,您完全误解了代码中根本没有数组值这一点<代码>资产是一个指针。我明白了!谢谢完全理解马洛克小姐@不,您完全误解了打印数组的大小。@不,您完全误解了代码中根本没有数组值这一点<代码>资产是一个指针。