基本上我正在做的是创建一个我可以构建其他程序的基本程序,并且我有一个函数(称为输入),它返回从用户输入收集的字符。现在,有2个错误说" return在没有强制转换的情况下生成整数"和"函数返回局部变量"的地址。我希望它能够做的是返回一个字符数组。
以下是代码:
#import <stdio.h>
void cls() {
system(cls);
}
char input() {
char X[0];
int Y = 0;
char Z;
while (1 == 1) {
Y = Y + 1; //increment step
Z = getch(); //get character input
if (Z == ';') {
break;
} //break if stop character is pushed
char Q[Y];
int a;
for (a = 0; a < Y; a = a + 1) {
Q[a] = X[a];
} //pass the items of X to the larger Q array
Q[Y] = Z; //add new value to Q at end of array
char X[Y];
int b;
for (b = 0; b < Y + 1; b = b + 1) {
X[a] = Q[a];
} //pass the items of Q back to a larger X
printf(X);
}
return X;
}
int main() {
while (1 == 1) {
//stuff will go here later
}
return 0;
}
答案 0 :(得分:0)
数组中的数组不是第一类,因此不能从函数中返回它们,也不能将它们作为参数传递给函数。你需要传递/返回指针。但是,由于指针必须指向一些东西(有用),你需要跟踪谁“拥有”指针指向的内容 - 谁负责分配并释放所涉及的记忆。
所以说,有几种方法可以管理传递和返回(指向)数组。
您可以让调用者分配一个数组(在堆栈或堆上),并将指针(和大小)传递给一个将填充它的函数。在这种情况下调用的函数不必担心分配和释放数组,但确实需要担心不会溢出它。
您可以让被调用者在堆上分配一个数组并返回一个指向调用者的指针。你不能用被调用堆栈分配的内存来做这个,因为当被调用者返回时释放所有被调用堆栈分配的内存,所以如果你试图返回一个指向它的指针,指针就会悬空。堆分配的数组避免了这个问题,但意味着调用者需要释放它,并且还有一个额外的困难,即调用者不知道分配的数组有多大,除非你返回一个包含该信息的结构和指针,或以某种方式将该信息传达给来电者。
答案 1 :(得分:0)
您应该执行以下操作:
错误说&#34; return在没有强制转换的情况下生成整数&#34;
将函数input
的返回类型从char
更改为char *
。
错误说&#34;函数返回局部变量的地址&#34;
我的变量X
返回的内存应该分配dynamically
,即使用calloc
或malloc
函数。因为在提供的代码中,内存保留我的变量X
是本地的并且存在于stack
中。所以当函数调用从