Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回数组大小的C总是返回相同的错误答案_C_Arrays_Pointers - Fatal编程技术网

返回数组大小的C总是返回相同的错误答案

返回数组大小的C总是返回相同的错误答案,c,arrays,pointers,C,Arrays,Pointers,在C中,我在内存中为x数量的y结构分配空间(请参见下面的代码),并返回此内存区域,以便与另一个.C源文件及其函数一起使用 一旦我将分配的内存传递给另一个函数,内存的实际内容就可以正确访问,但是当我想返回传递给函数的结构数量时,它总是返回4 在下面的代码中,我显示了结构的数量是37,但数组的大小返回为4 “数组”确实按照预期正确地填充了所有37个元素,但我不明白为什么它总是说长度为4 我是C新手,所以我可能会错过一些明显的东西 locof是一个文件名,它不是空的,并且文件已正确打开 代码: 这将打

在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/没有方法/没有可移植的方法/。一些实现可能提供一种查询分配大小的方法,但正如所说的,这是不可移植的。我明白了!谢谢完全理解马洛克小姐@不,您完全误解了打印数组的大小。@不,您完全误解了代码中根本没有数组值这一点<代码>资产是一个指针。我明白了!谢谢完全理解马洛克小姐@不,您完全误解了打印数组的大小。@不,您完全误解了代码中根本没有数组值这一点<代码>资产是一个指针。