2

私はほとんどすべてを試しましたが、この問題を解決できません。私は構造体を持っています:

typedef struct{
char firstname[15];
char lastname[20];
char status[1];
char dateOfBirth[10];   
} Rec;

そしてメイン:

int main()
{    
Rec rec;
strcpy(rec.status,"M");
strcpy(rec.dateOfBirth,"14-11-2000");
strcpy(rec.firstname,"Peter");
strcpy(rec.lastname,"Something");

printf("%s, %s, %s, %s\n", rec.status,rec.dateOfBirth,rec.firstname,rec.lastname);

return 0;
}

だから、これは、印刷する必要があります-> M、14-11-2000、Peter、何か..しかし、そうではありません! それは印刷します-> M14-11-2000、14-11-2000、Peter、Something。

つまり、「ステータス」メンバーは「破損」します。構造体のデータの順序を変更すると、出力が変更されますが、破損するデータが常にあることに気付きました。

構造体を定義する方法に何か問題がありますか? どうも!

4

4 に答える 4

6

C では、文字列は 0 バイトで終了する char 配列であるため、char 配列は 1 バイト長くする必要があります。

于 2013-05-03T20:43:08.553 に答える
3

配列が短すぎますchar。終端のヌル文字を考慮する必要があります。statusdateOfBirth

于 2013-05-03T20:43:56.183 に答える
2

これは、char 配列にヌル ターミネータがないためです (ステータス バフにはヌル ターミネータのスペースがありません)。printfnull ターミネータに遭遇するまで印刷を続け、境界チェックは行いません。

于 2013-05-03T20:43:52.960 に答える