2D矩形阵列成函数
我有一个2D矩形阵列, 其中内容是由用户, 定义为如下被传递到固定函数原型:2D矩形阵列成函数
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]
我可以知道哪里出了问题?如果原型必须如上所述?我是否更改数组声明?
编辑每加入到这个问题的信息,在OP不能改变的函数原型,它必须是:
int findTarget (char *string, char *nameptr[], int num)
既然如此,只有这样,才能“通”的二维表本函数是通过一个临时指针数组。一些花哨的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使用沃拉斯(可变长度数组),使宽度向功能的任意参数,以及:
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);
谢谢。然而,很抱歉,如果原型必须经过编辑,该怎么办?我是否将声明更改为char * rect_array [4] [20]? – brainsfrying 2013-03-14 17:18:56
@brainsfrying *“如果原型必须经过编辑会怎么样”*我真的不知道这意味着什么。什么是原型**现在**?你的* rect_array [4] [20]'不是*你认为它是什么。它声明了一个80 char *'的表。 – WhozCraig 2013-03-14 17:22:32
原型必须固定为int findTarget(char * string,char * nameptr [],int num)正确,我需要总共80个字符。 – brainsfrying 2013-03-14 17:25:51
1)。选择一种语言。 2)每行固定20个字符宽? – WhozCraig 2013-03-14 17:02:59
'rect_array'的声明是什么?它是'char * rect_array [4] [20]'还是'char rect_array [4] [20]'? – MOHAMED 2013-03-14 17:04:21
其rect_array [4] [20] – brainsfrying 2013-03-14 17:05:18