私は非常に単純なプログラムで問題を抱えていましたが、なぜそれは本当にわかりません。連絡先のリストを意味し、別の構造体があり、連続スキャンで文字列を追加しています
今typedef struct {
char name[50];
char p_id[11];
char cel[11];
int by;
int id;
} Person;
:そこの人のための構造体がある
typedef struct {
Person * people;
} lContacts;
私はそれに人のデータを含めるようにしようとしてきた、とその人を連絡先リストに追加します。人は、通常は追加されているので、私はここにコードを投稿しませんが、私は、文字列を読んだときに何か間違った出来事があります:私は私が記載されているときので、私は、そこに印刷テストを持っていることを
void include(lContacts * myContacts)
{
Person p;
scanf("%s", p.name);
scanf("%d", &p.by); //birth year
scanf("%s", p.p_id);
printf("TEST P_ID: %s\n\n", p.p_id);
scanf("%s", p.cel);
printf("TEST P_ID AGAIN: %s\n\n", p.p_id);
myContacts->people[index]=p; //don't worry about the index, there is a piece of code I'm omitting to make it easier to read, just assume it is right.
}
}
お知らせ連絡先p_id
はcel
と連結していたので、間違いが見つかるまでコード全体を印刷しました。
Name
1991
11111111111
<console prints| TEST P_ID: 11111111111>
22222222222
<console prints| TEST P_ID AGAIN: 1111111111122222222222>
私はp.cel
を印刷する場合は、それが正しく印刷され
<console prints 22222222222>
任意のアイデア:ここ
は入力例ですか?文字列をスキャンするときに '&'を使用する必要がありますか? (私はそれについて、私が理解した方法を読んで、必要はありません。それは正しいのですか?)
Cの文字列は、NUL文字(別名「\ 0」)で終わる 'char'の配列で構成されています。 'p_id'配列は11バイトなので、10桁とNULだけを格納できます。つまり、バッファオーバーランのバグがあります。 – user3386109
ie - pidをchar [12]に変更する(11がpidの最大長である場合) – pm100