C 如何更改数组中结构的变量
我在想办法。我创建了一个名为guest的新结构:C 如何更改数组中结构的变量,c,C,我在想办法。我创建了一个名为guest的新结构: typedef struct guest { char guest_name[GUEST_AND_ROOM_NAME_LENGTH]; int money_left; bool is_guest_in_room; }guest; 我编写了一个函数来初始化来宾结构数组中每个结构的变量。我对数组进行了如下初始化: guest *guest_list[MAX_GUESTS_IN_HOTEL]; 我更新参数的功能是: void
typedef struct guest {
char guest_name[GUEST_AND_ROOM_NAME_LENGTH];
int money_left;
bool is_guest_in_room;
}guest;
我编写了一个函数来初始化来宾结构数组中每个结构的变量。我对数组进行了如下初始化:
guest *guest_list[MAX_GUESTS_IN_HOTEL];
我更新参数的功能是:
void create_new_guest(char *guest_line_in_file, guest **guest_list, int num_of_guests_in_hotel)
{
char *line_ptr = (char*)malloc((strlen(guest_line_in_file)+1) * sizeof(char));
char *split_string[NUM_OF_PARAMETERS_FOR_GUEST];
strcpy(line_ptr, guest_line_in_file);
if ((guest_list != NULL)&&(line_ptr!=NULL)) {
split_string_by_space(line_ptr, split_string);
strcpy((guest_list[num_of_guests_in_hotel])->guest_name, split_string[0]);
(guest_list[num_of_guests_in_hotel])->is_guest_in_room = false;
(guest_list[num_of_guests_in_hotel])->money_left = atoi(split_string[1]);
}
else{
printf("Memory allocation of new guest failed! Exiting\n");
}
free(line_ptr);
return;
}
对函数的调用:
create_new_guest(current_line_in_file, guest_list, num_of_guests_in_hotel);
其中,\u文件中的当前\u行\u是一个字符串,包含变量的输入,并通过空间函数拆分\u字符串\u进行分解
但每次我更新客人的名字时:
'访问冲突写入位置0xCCCC'
我知道我初始化数组的方式有问题,但我不太明白是什么问题
提前感谢。您从未分配内存来存储实际的
guest
数据结构
guest\u列表
声明分配一个数组,该数组可以容纳给定数量的指针。它不会分配指针将引用的内存。您永远不会分配内存来存储实际的guest
数据结构
guest\u列表
声明分配一个数组,该数组可以容纳给定数量的指针。它不分配指针将引用的内存。1。
客人名单
,之后:
guest *guest_list[MAX_GUESTS_IN_HOTEL];
char *split_string[NUM_OF_PARAMETERS_FOR_GUEST];
以及
split_字符串
,在以下位置之后:
guest *guest_list[MAX_GUESTS_IN_HOTEL];
char *split_string[NUM_OF_PARAMETERS_FOR_GUEST];
不是您可能希望的guest
和char
各自数据类型的数组。它们是这些声明之后的指针数组
省略取消引用运算符*
:
guest guest_list[MAX_GUESTS_IN_HOTEL];
char split_string[NUM_OF_PARAMETERS_FOR_GUEST];
在调用create\u new\u guest()
时,还可以将参数guest**guest\u list
编辑为guest*guest\u list
。然后再测试一次
2.
结构名称/标记及其自身的变量不应使用相同的标识符:
typedef struct guest {
char guest_name[GUEST_AND_ROOM_NAME_LENGTH];
int money_left;
bool is_guest_in_room;
}guest; // <- Same Name for variable as structure
typedef结构来宾{
char guest_name[客人和房间名称长度];
剩下的钱;
布尔是房间里的客人;
}客人;//1.
客人名单
,之后:
guest *guest_list[MAX_GUESTS_IN_HOTEL];
char *split_string[NUM_OF_PARAMETERS_FOR_GUEST];
以及
split_字符串
,在以下位置之后:
guest *guest_list[MAX_GUESTS_IN_HOTEL];
char *split_string[NUM_OF_PARAMETERS_FOR_GUEST];
不是您可能希望的guest
和char
各自数据类型的数组。它们是这些声明之后的指针数组
省略取消引用运算符*
:
guest guest_list[MAX_GUESTS_IN_HOTEL];
char split_string[NUM_OF_PARAMETERS_FOR_GUEST];
在调用create\u new\u guest()
时,还可以将参数guest**guest\u list
编辑为guest*guest\u list
。然后再测试一次
2.
结构名称/标记及其自身的变量不应使用相同的标识符:
typedef struct guest {
char guest_name[GUEST_AND_ROOM_NAME_LENGTH];
int money_left;
bool is_guest_in_room;
}guest; // <- Same Name for variable as structure
typedef结构来宾{
char guest_name[客人和房间名称长度];
剩下的钱;
布尔是房间里的客人;
}客人;//您没有提供在调用代码中增加来宾数的方法,因此在添加来宾时调用代码无法实现。您没有提供在调用代码中增加来宾数的方法,因此在添加来宾时调用代码无法实现。