我知道,为了从函数返回字符串,我必须返回一个指针。我不明白的是为什么将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/

10-11 21:58
查看更多