你有一些事情发生在这里。
函数声明/原型需要为其数组和矩阵具有固定大小。*
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]);
}
}