我知道,为了从函数返回字符串,我必须返回一个指针。我不明白的是为什么将char数组与整数进行某种区别对待,并在退出函数时将其破坏。那可能是因为我来自高级语言世界,但这对我似乎同样有效:
int x = 1;
return x;
char x[] = "hello";
return x;
最佳答案
原因既简单又微妙:不能声明C函数返回数组。
当您返回一个指针时,如下所示:
char *foo(void)
{
char x[] = "hello";
return x;
}
return x;
实际上没有返回x
。它正在返回指向x
1的第一个元素的指针-这与说的完全相同:return &x[0];
应该更清楚为什么这是不正确的-完全与此类似:
int *foo(void)
{
int x = 100;
return &x;
}
但是,可以从函数返回结构-因此,只要包裹在
struct
中,就可以返回数组。以下是完全可以的:struct xyzzy {
char x[10];
};
struct xyzzy foo(void)
{
struct xyzzy x = { "hello" };
return x;
}
1.这是数组类型的特殊情况规则的结果。在表达式中,如果数组不是一元
&
或sizeof
运算符的主题,则它的值将是指向其第一个元素的指针。尝试固定C语言中的实际数组有点像试图抓住手中的雾-它只是消失了,由指针代替。关于c - 在C函数中返回字符串,需要说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3508369/