【发布时间】:2015-09-12 15:41:08
【问题描述】:
这可能吗? 假设我要返回一个包含两个字符的数组
char arr[2];
arr[0] = 'c';
arr[1] = 'a';
来自一个函数。我什至使用什么类型的功能?我唯一的选择是使用指针并使函数无效吗?到目前为止,我已经尝试过使用 char* 函数或 char[]。显然你只能拥有 char(*[]) 的功能。我想避免使用指针的唯一原因是函数必须在遇到“返回某些东西”时结束;因为“某物”的值是一个字符数组(不是字符串!),它可能会根据我通过主函数传递给函数的值而改变大小。感谢任何提前回复的人。
【问题讨论】:
-
函数应该返回 char *。你预见到什么问题?
-
我试过了,但每次都会出现段错误。我只是使用 char* 函数并返回 arr;当我尝试输出时它会出现段错误。 gcc 还警告我,当我从上面返回数组时,我正在尝试返回整数而不进行强制转换
-
@AnnoyingQuestions 因为一个数组在函数内部声明时分配在函数的堆栈框架中,因此在返回它时,它会在返回后立即与函数一起释放。
-
从技术上讲,它没有被明确地释放。只是在函数之后使用它可能会导致未定义的行为,因为在此函数之后调用的函数可能会覆盖内存位置(在堆栈中)的内容
-
如果你给我们的三行代码在一个函数中,那么你试图在它超出范围后返回一个本地,所以是的,这将是段错误。它是一个数组的事实与它无关。
标签: c arrays function pointers character