編集質問に追加された情報ごとに、OPは関数プロトタイプを変更できません。これは次のようにする必要があります。
int findTarget (char *string, char *nameptr[], int num)
この場合、2Dテーブルをこの関数に「渡す」唯一の方法は、一時的なポインタ配列を使用することです。いくつかの派手なmalloc()
-ingは機能しますが、最終的にはこれに帰着します:
char data[4][20];
char *dataptrs[] = { data[0], data[1], data[2], data[3] };
char name[] = "name";
findTarget(name, dataptrs, sizeof(dataptrs)/sizeof(dataptrs[0]));
元の投稿
20文字の長さのテーブルが固定されたCソリューションの場合:
int findTarget (const char *string, const char names[][20], size_t rows)
{
// each row ("rows" count of them) is fixed at 20 chars wide.
// ....
}
または...
int findTarget (const char *string, const char (*names)[20], size_t rows)
{
// each row ("rows" count of them) is fixed at 20 chars wide.
// ....
}
そのように呼び出されます:
char data[4][20];
findTarget("targetName", data, sizeof(data)/sizeof(data[0]));
注:プラットフォームがそれらをサポートしている場合(およびほとんどすべてがサポートしている場合)、CでVLA(可変長配列)を使用して、幅を関数の任意のパラメーターにすることもできます。
int findTarget (const char *string,
size_t rows, size_t cols,
const char (*names)[cols])
{
// each row ("rows" count of them) is variable to "cols" columns wide.
// ....
}
次のように呼び出されます:
char data[4][[20];
findTarget("target", sizeof(data)/sizeof(data[0]), sizeof(data[0]), data);