我試圖將一個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