strcpy 通过传递给函数的字符串数组?
strcpy through array of strings passed to a function?
长话短说,我正在制作这款 3D OpenGL 生成器游戏。细节并不重要,但这是我的问题。我有这个字符串数组:
char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
我试图将它们传递给一个函数,该函数接受字符串数组形式的“列表”,并通过 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]); 时,我仍然会遇到访问冲突错误部分。
Image of the error
这里有什么问题?这不是我应该传递二维字符数组的方式吗?或者是我如何将它传递给 strcpy 的问题?需要明确的是,list_size 在这种情况下是 5,所以这是正确的,问题不应该是 for 循环越界。
如果有人可以帮助我,在此先感谢!
这个数组
char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
用在表达式中,例如函数参数被隐式转换为指向其第一个元素的指针。
数组的元素类型为char[30]
。所以接受这个数组作为参数的函数需要声明对应的参数为
char ( *list )[30]
指针类型 char ( * )[30]
和 char **
之间没有隐式转换。
所以改变第一个函数参数的类型。
另一种方法就是像
那样改变数组的声明
char * building_category_names_UPPER_CASE[] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
在这种情况下,函数参数可能确实具有 char **
.
类型
长话短说,我正在制作这款 3D OpenGL 生成器游戏。细节并不重要,但这是我的问题。我有这个字符串数组:
char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
我试图将它们传递给一个函数,该函数接受字符串数组形式的“列表”,并通过 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]); 时,我仍然会遇到访问冲突错误部分。
Image of the error
这里有什么问题?这不是我应该传递二维字符数组的方式吗?或者是我如何将它传递给 strcpy 的问题?需要明确的是,list_size 在这种情况下是 5,所以这是正确的,问题不应该是 for 循环越界。
如果有人可以帮助我,在此先感谢!
这个数组
char building_category_names_UPPER_CASE[][30] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
用在表达式中,例如函数参数被隐式转换为指向其第一个元素的指针。
数组的元素类型为char[30]
。所以接受这个数组作为参数的函数需要声明对应的参数为
char ( *list )[30]
指针类型 char ( * )[30]
和 char **
之间没有隐式转换。
所以改变第一个函数参数的类型。
另一种方法就是像
那样改变数组的声明char * building_category_names_UPPER_CASE[] = { "NOTHING", "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
在这种情况下,函数参数可能确实具有 char **
.