返回一个char指针数组

Pie*_*ter 4 c pointers

我正在尝试将一个数组返回char*给函数.我已经将我的代码简化为一个测试用例,该测试用例克隆了一个char数组,而不是包含字符,而是包含指向这些字符的指针.

/*
 * code.c
 */
#include <stdio.h>

char* makePointerCopy(char cIn[]);

int main() {
    char cTest[] = {'c', 't', 's', 't'};
    char* cPTest[] = makePointerCopy(cTest);
    printf("%p %c", cPTest, *cPTest);
    fflush(stdout);
    return 0;
}

char* makePointerCopy(char cIn[]) {
    char* cOut[sizeof(cIn)/sizeof(cIn[0])];
    int iCntr;

    for (iCntr = 0; iCntr < sizeof(cIn)/sizeof(cIn[0]); iCntr++)
        cOut[iCntr] = cIn + iCntr;

    return cOut;
}
Run Code Online (Sandbox Code Playgroud)

抛开一些警告,这就是编译器对这段代码的看法:

初始化程序无效(at char* cPTest[] = makePointerCopy(cTest);)

为什么会这样?

dan*_*ben 5

因为makePointerCopy返回a char*,而不是a char*[].

您应该能够将该行更改为:

char* cPTest = makePointerCopy(cTest);
Run Code Online (Sandbox Code Playgroud)

更具体地说,你得到THAT错误消息而不是类型的原因是数组初始化器需要是编译时常量.

来自http://bytes.com/topic/c/answers/215573-invalid-initializer

即使声明不在文件范围内,它在C90和C99都是非法的.C90要求自动和寄存器阵列的编译时常量初始化器.并且C90和C99都需要使用a)字符串文字初始化字符数组,或者b)括号括起的初始化列表.

但是,类型不匹配是这里的实际问题.