编辑根据添加到问题中的信息,OP 不能更改函数原型,它必须是:
int findTarget (char *string, char *nameptr[], int num)
在这种情况下,将 2D 表“传递”给该函数的唯一方法是通过临时指针数组。一些花哨malloc()
的东西会起作用,但最终它会归结为:
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);