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

1文字分のスペースがあることを意味します

代わりに、文字列を保持するために文字の配列を使用する必要があります

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 に答える