gpt4 book ai didi

c - 二维矩形数组转换为函数

转载 作者:行者123 更新时间:2023-11-30 15:51:01 26 4
gpt4 key购买 nike

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

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]

我可以知道出了什么问题吗?原型(prototype)是否必须如所提到的那样?我要更改数组声明吗?

最佳答案

编辑根据添加到问题中的信息,OP不能更改函数原型(prototype),函数原型(prototype)必须是:

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

在这种情况下,将 2D 表“传递”给该函数的唯一方法是通过临时指针数组。一些奇特的 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 中使用 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);

关于c - 二维矩形数组转换为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com