你有幾件事會在這裏。
函數聲明/原型需要有固定尺寸的陣列&矩陣。*
char *getRownames (int a, int b, char *matrix[a][b])
將不能工作,因爲編譯器不知道a
或b
編譯程序時。如果你知道數組將是它的大小將需要
char *getRownames (int a, int b, char *matrix[7000][14])
。那麼你根本不需要a
或b
。如果您希望能夠將不同大小的矩陣傳遞給函數,那完全是另一回事。
*(請注意,編譯器允許你離開了數組的第一個維度:char *matrix[][14]
或char *array[]
)
接下來,你需要通過malloc將返回值轉換爲char *,爲的malloc()返回void *:
rownames[a] = (char*)malloc(strlen(matrix[i][0])+1);
順便說一句,它應該是在循環rownames[i]
。 :-)由於i
是你的循環變量。
最後,它看起來像你想返回一個char *數組,但是return *rownames
將只返回數組中的第一個值。同樣,如果你知道數組的大小,將現有的數組傳遞給函數並使其填入數值會更容易。否則,你必須malloc數組返回。
char *result[7000][14];
char *firstRows[7000];
//... other code that fills in these values
getRownames(7000, 14, result, firstRows);
void getRownames (int a, int b, char* matrix[7000][14], char* returnrows[7000])
{
for(int i=0;i<a;i++){
returnrows[i] = (char*)malloc(strlen(matrix[i][0])+1);
strcpy(returnrows[i],matrix[i][0]);
}
}
rownames是一個指針指針,所以char ** names = getRownames(7000,14,result);可能工作 – Chris 2012-04-17 19:26:00
需要修復return語句和函數簽名, – Mat 2012-04-17 19:27:08
不應該是'rownames [i] = malloc ...'嗎? – 2012-04-17 19:29:03