我试图在file1.c中将数组从child_prog()
返回到main()
。我尝试在下面给出伪代码。
#include<stdio.h>
#include<stdlib.h>
int* child_prog(int some_input);
void main(void){
int C[10];
int some_input;
C = child_prog(some_input);
}
int* child_prog(int some_input){
static int out[10];
...
.../*some wizardry*/
return out;
}
现在,编译器会生成一个错误,指出它无法分配给C
(这是一个int []类型)从child_prog返回的值(这是一个int *类型)。虽然,当C
int*
和malloc
为10 ints
内存时,该程序正常运行。我无法理解为什么编译器无法将C
(一个定义为C[10]
的数组,因此指针)分配给child_prog
返回的值(定义为static int out[10]
的数组并因此再次指针)。
答案 0 :(得分:4)
memcpy
它。int*
!= int[]
,而第一个是指针,可能指向int
s序列的int
,第二个是int
s int *C;
并将数组的长度(如果在编译时未知)作为out参数传递。static int out[10];
不是malloc
ed,而是静态。答案 1 :(得分:1)
一种解决方案可以是将C声明为:
int *C;
正如Binyamin所说
您无法更改静态分配的数组地址,这正是您尝试使用的地址:
C = child_prog(some_input);
答案 2 :(得分:0)
int []
的类型是int * const
,这意味着它指向的内存是一个常量,尝试更改它会产生编译错误。显然它不等于int *
。out
中的变量child_prog()
是静态分配的,这意味着它不在堆栈上,而是在全局数据部分的某个位置。因此,无论您拨打child_prog()
多少次,您都将返回相同的内存位置。 memcpy(dest,src,bytes)
返回的数据,请执行child_prog()
。答案 3 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
#define SUCCESS 0
#define FAILURE 1
int child_prog(int some_input, int *output, int output_size);
void main(void){
int C[10];
int some_input;
C = child_prog(some_input, c, 10);
}
int child_prog(int some_input, int *output, int output_size)
{
static int source[10];
...
.../*some wizardry*/
memcpy(output, source, output_size);
... if (erronous Condition)
return FAILURE;
else
return SUCCESS;
}