我试图将一个char*
的数组返回给一个函数。我简化了我的代码到一个测试用例,该用例克隆了一个char数组,而不是包含chars的指针指向这些chars。返回一个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 ...(char(&cIn)[N])',那么N将匹配元素的数量。可选:使用'char * start,char * end'来传递数组。 –
gimpf
2010-01-22 15:28:10
如果我将iSize传递给函数,那么在makePointerCopy调用之前会把这个放在main()块中吗? 'int iSize = sizeof(cTest)/ sizeof(cTest [0]);' – Pieter 2010-01-22 15:35:01