-1

我正在尝试将结构数组排入队列,但每当我尝试将信息插入其中时它就会崩溃。

结构本身如下所示:

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);

是什么导致了这次崩溃,我该如何预防?

4

2 回答 2

3

当你声明一个变量时

char first_name;

这意味着一个字符有空间

您应该改为使用字符数组来保存字符串

char first_name[64];

person test;
test.first_name = "John";

不是初始化字符串或结构的正确方法,要么在声明中进行,要么像以前那样在字符串中手动进行 strcpy:

person test = { "John", "Doe", "A" };
于 2012-11-10T19:47:27.500 回答
2

结构中的 char 类型应该是 char* 以便存储字符串,否则它们只存储单个字符。此外,应该为他们分配空间。

于 2012-11-10T19:48:26.233 回答