我有一个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]
我可以知道出了什么问题吗?如果原型必须如上所述?我是否更改了数组声明?
答案 0 :(得分: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-char长度表的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(可变长度数组)来使宽度成为函数的任意参数:< / p>
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);