C函数的原型返回字符串数组

时间:2013-05-02 12:12:24

标签: c arrays string return prototype

所以,我正在尝试创建一个可读性很好的C函数原型,它返回一个字符串数组(即char*)。我能想出的最接近的是:

const char * const *entrypoints()
{
    static const char* arrays[] = {"test123", "test2"};
    return arrays;
}

然而,我不喜欢声明中的两个*,它看起来很可怕:) ...但我没有找到一种方法来强调该函数返回一个字符串数组的事实...在函数声明中使用[]会导致有趣的编译错误(例如'entrypoints'声明为函数返回const char* (entrypoints() [])的数组或const char[]* entrypoints()的'['标记之前的预期unqualified-id或const char*[] entrypoints() ...是的,编译器在两种情况下都是正确的),谷歌似乎没有答案...所以我在这里。

有没有办法以一种易读的方式声明一个函数原型 (这将在一个公共API中),它将返回一个C字符串数组。不是C ++。 C 即可。平原老C.如果没有,我将不得不坚持两星的方法......即。 char **。并不是说这是一个(模糊地)尴尬的东西,但我想强调该函数返回一个字符串数组。 C喜欢字符串:)

1 个答案:

答案 0 :(得分:2)

  

我不喜欢声明中的两个*

我为你感到难过,但这就是你如何声明一个返回类型的“指针数组”。数组衰变为指向其第一个元素的指针,因此这个声明是您完成所需内容的唯一方法。

你可以做的是返回一个指向数组字符串的指针:

const char *(*fn())[2]
{
    static const char *arr[2] = {
        "foo",
        "bar"
    };
    return &arr;
}