ファイルからテキストを読み込み、構造体の配列に格納するためにCを使用しています。 しかし、私はprintfを使ってそれを印刷した後、出力は私が期待したものではありません。ファイルからテキストを読み込みますが、正しく表示されません。
マイコード:
#include<stdio.h>
struct userINFO {
char id[6];
char name[20];
char lastName[20];
};
int main()
{
FILE *fdata;
struct userINFO allUser[3];
int i=0;
fdata = fopen("textdata.txt","r");
if (fdata == NULL)
{
printf("ERROR!");
return 0;
}
while (fscanf(fdata,"%s %s %s", allUser[i].id, allUser[i].name, allUser[i].lastName)!=EOF)
{
i++;
}
for (i = 0; i < 3 ; i++)
{
printf("ID: %s\n", allUser[i].id);
printf("Name: %s\n", allUser[i].name);
printf("LastName: %s\n", allUser[i].lastName);
}
fclose(fdata);
return 0;
}
テキストファイル:
001001
Firstname1
LastName1
601002
Firstname2
LastName2
601003
Firstname3
LastName3
出力
ID: 001001Firstname1
Name: Firstname1
LastName: LastName1
ID: 601002Firstname2
Name: Firstname2
LastName: LastName2
ID: 601003Firstname3
Name: Firstname3
LastName: LastName3
それがどうあるべきか:
ID: 001001
Name: Firstname1
LastName: LastName1
ID: 601002
Name: Firstname2
LastName: LastName2
ID: 601003
Name: Firstname3
LastName: LastName3
私はfscanf - > fgetsを変更したり、printfに%6sを追加したり、テキストフォーマットを変更するなど、多くのことを試しましたが、その出力は同じです。 正しく表示されるようにコードを変更する必要がありますか?
'id'配列は6文字を保持でき、idは6文字です。しかし、終了するヌル文字のためのスペースも確保する必要があります。そうでないと、終端のヌルは 'name'の最初の文字に書き込まれます。それは次の文字列スキャンによって上書きされます。したがって、文字列 'id'はbの' name'に実行されます。あなたの配列を大きくする。また、バッファオーバーフローを防ぐために、読み込み時に文字列のサイズを制限する必要があります。 –