C语言 strcpy通过数组的字符串传递给函数?



长话短说,我正在制作这款3D OpenGL builder游戏。细节并不重要,但我的问题是。我有这个字符串数组:

char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" }; 

我试图将它们传递给一个接受"list",并通过Create_Button方法为列表中的每个项创建按钮。

void Create_Button_List(char** list, int list_size, char* group_name, int pos_x, int pos_y)
{
for (int i = 1; i < list_size; i++)
{
char name[50];
strcpy(name, list[i]);
char group[50];
strcpy(group, group_name);
Create_Button(name, group, pos_x, i * pos_y, 205, 50, text_color_white, bg_color, text_color_white, bg_color_hover);
}
} 

但是即使VS在构建时没有给我任何错误,当它到达strcpy(name, list[I]);时,我仍然会得到访问冲突错误部分。

错误图片

这里有什么问题?这不应该是我传递二维字符数组的方式吗?还是我把它传递给策略的方式有问题?要清楚,在这种情况下,listrongize是5,所以这是正确的,问题不应该是for循环越界。

如果有人可以帮助我这个,提前感谢!

这个数组

char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" }; 

在表达式中使用,例如函数实参被隐式转换为指向其第一个元素的指针。

array的元素类型为char[30]。因此,接受这个数组作为参数的函数需要声明相应的形参

char ( *list )[30]

指针类型char ( * )[30]char **之间没有隐式转换。

所以改变第一个函数参数的类型。

另一种方法是改变数组的声明,如
char * building_category_names_UPPER_CASE[] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" }; 

在这种情况下,函数参数可能确实具有char **类型。

相关内容

最新更新