printf を使用して、point_person というポインター内の文字の配列を出力しようとしています。それを使用してユーザーの名を返すと、大量のゴミが出力され、最後に名前が出力されます。
コードは次のようになります。
person dequeue_person;
person *point_person = &dequeue_person;
get_person(point_person, 9);
printf("%s", point_person->first_name);
person は、first_name[64]、last_name[64]、pes_nbr[64] の 3 つの char 変数を含む typedef 構造体です。
出力は次のようになります。
F÷rnamn: ジョン ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠ジョン
何が原因で、今後これを回避するにはどうすればよいですか?
編集: first_name を入力するコードは次のようになります。
void get_person(person *pers, int index)
{
person per_son;
strcpy(per_son.first_name, queue[(index+head)%QUEUE_MAX_SIZE].first_name);
strcpy(per_son.last_name, queue[(index+head)%QUEUE_MAX_SIZE].last_name);
strcpy(per_son.pers_nbr, queue[(index+head)%QUEUE_MAX_SIZE].pers_nbr);
pers = &per_son;
printf("Förnamn: %s\n", per_son.first_name);
}
編集2:自分で考え出した。get_person 関数を編集して per_son 構造体を削除し、strcpy を pers_son ではなく pers に変更する必要がありました。