我正在尝试将一个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;
}
除了一些警告之外,这就是编译器对这段代码片段的反馈:
无效的初始化 (位于
char* cPTest[] = makePointerCopy(cTest);
)
为什么会这样呢?
char* cOut[sizeof(cIn)/sizeof(cIn[0])];
是行不通的。在参数列表中使用简单的char cIn[]
不会包含数组的大小信息。你需要像template<size_t N> ... (char (&cIn)[N])
这样的东西,然后 N 将匹配元素的数量。另一种选择是使用char* start, char* end
来传递数组。 - gimpfmakePointerCopy
调用之前的 main() 块中,只要我将 iSize 传递给函数,这样做也可以解决问题吗?int iSize = sizeof(cTest)/sizeof(cTest[0]);
- Pieter