Typedef结构导致程序崩溃

时间:2012-11-10 19:45:42

标签: c function struct queue typedef

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

结构本身看起来像这样:

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

导致此次崩溃的原因是什么?如何预防?

2 个答案:

答案 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 *以存储字符串,否则它们只存储单个字符。此外,应为他们分配空间。