あなたはここで起こっていくつかのことがあります。
関数宣言/プロトタイプは、そのアレイ用の固定サイズ&行列を持っている必要があります。あなたのプログラムのコンパイル時にコンパイラがa
またはb
を知らないので、*
char *getRownames (int a, int b, char *matrix[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
はそのためにreturn文と関数シグネチャを修正する必要があります – Mat
'rownames [i] = malloc ...'ではありませんか? –