我正在尝试将结构数组排入队列,但每当我尝试向其中插入信息时它就会崩溃。
结构本身看起来像这样:
typedef struct {
char first_name;
char last_name;
char pers_nbr;
} person;
虽然功能如下:
void enqueue(person pers)
{
strcpy(queue[tail].first_name, pers.first_name);
strcpy(queue[tail].last_name, pers.last_name);
strcpy(queue[tail].pers_nbr, pers.pers_nbr);
tail = (tail+1) % QUEUE_MAX_SIZE;
nbr_elem++;
}
我一直在调试,它在第一个strcpy崩溃并返回错误“访问冲突读取位置”。这个问题似乎与pers对象有关。
以下是我尝试插入数据的方法:
person test;
test.first_name = "John";
test.last_name = "Doe";
test.pers_nbr = "A";
enqueue(test);
导致此次崩溃的原因是什么?如何预防?
答案 0 :(得分:3)
声明类似
的变量时char first_name;
这意味着有一个角色的空间
你应该使用一个字符数组来保存字符串
char first_name[64];
和
person test;
test.first_name = "John";
不是初始化字符串或结构的正确方法,可以在声明中执行,也可以像以前一样在字符串中手动strcpy:
person test = { "John", "Doe", "A" };
答案 1 :(得分:2)
结构中的char类型应该是char *以存储字符串,否则它们只存储单个字符。此外,应为他们分配空间。