ここでいくつかのことが起こっています。
関数宣言/プロトタイプは、配列と行列のサイズが固定されている必要があります。*
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()がvoid *を返すため、mallocからchar*に戻り値をキャストする必要があります。
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]);
}
}