基本上,我正在做的是制作一个基本程序,我可以用它构建其他程序,并且我有一个函数(称为输入),它返回从用户输入收集的字符。现在,有 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;
}
最佳答案
数组不是 C 中的一流类型,因此您不能从函数返回它们,也不能将它们作为参数传递给函数。您需要传递/返回指针。但由于指针必须指向某个东西(才有用),因此您需要跟踪谁“拥有”指针所指向的内容——谁负责分配和释放所涉及的内存。
也就是说,有多种方法可以管理传递和返回(指向)数组的方法。
您可以让调用者分配一个数组(在堆栈或堆上),并将指向该数组的指针(和大小)传递给将填充该数组的函数。在本例中为被调用函数不必担心分配和释放数组,但需要担心不会溢出它。
您可以让被调用者在堆上分配一个数组并返回一个指向调用者的指针。您不能使用被调用者堆栈分配的内存来执行此操作,因为当被调用者返回时,所有被调用者堆栈分配的内存都会被释放,因此如果您尝试返回指向它的指针,则该指针将悬空。堆分配的数组可以避免这个问题,但意味着调用者需要释放它,并且还有一个额外的困难,即调用者不知道分配的数组有多大,除非你返回一个包含该信息和指针的结构体,或者以某种方式将该信息传达给调用者。
关于C 从函数返回 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492933/