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] 

我可以知道哪里出了问题?如果原型必须如上所述?我是否更改数组声明?

+1

1)。选择一种语言。 2)每行固定20个字符宽? – WhozCraig 2013-03-14 17:02:59

+2

'rect_array'的声明是什么?它是'char * rect_array [4] [20]'还是'char rect_array [4] [20]'? – MOHAMED 2013-03-14 17:04:21

+0

其rect_array [4] [20] – brainsfrying 2013-03-14 17:05:18

编辑每加入到这个问题的信息,在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); 
+0

谢谢。然而,很抱歉,如果原型必须经过编辑,该怎么办?我是否将声明更改为char * rect_array [4] [20]? – brainsfrying 2013-03-14 17:18:56

+0

@brainsfrying *“如果原型必须经过编辑会怎么样”*我真的不知道这意味着什么。什么是原型**现在**?你的* rect_array [4] [20]'不是*你认为它是什么。它声明了一个80 char *'的表。 – WhozCraig 2013-03-14 17:22:32

+0

原型必须固定为int findTarget(char * string,char * nameptr [],int num)正确,我需要总共80个字符。 – brainsfrying 2013-03-14 17:25:51