0

我有一个 2D 矩形数组char rect_array [4][20],其中的内容由用户定义,要传递到固定函数原型中,如下所示:

int findTarget (char *string, char *nameptr[], int num)

以下不起作用,因为在 rect_array 中下划线为错误:

findTarget (user_input, rect_array, no_of_names);

试过等:

rect_array[4][20]
&rect_array
rect_array[4]

我可以知道出了什么问题吗?如果原型必须如上所述?我要更改数组声明吗?

4

1 回答 1

1

编辑根据添加到问题中的信息,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);
于 2013-03-14T17:12:32.350 回答