Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何更改数组中结构的变量_C - Fatal编程技术网

C 如何更改数组中结构的变量

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

我在想办法。我创建了一个名为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 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[客人和房间名称长度];
剩下的钱;
布尔是房间里的客人;

}客人;//您没有提供在调用代码中增加来宾数的方法,因此在添加来宾时调用代码无法实现。您没有提供在调用代码中增加来宾数的方法,因此在添加来宾时调用代码无法实现。