次のように構造化されたファイルから、人のイニシャルの文字をchar配列(文字列)に格納する際に問題が発生しました。
AB Albert Bumble
FG Fred Goofoff
GF Gary Flintstone
DD Donald Duck
char finitlett [MAX]は、イニシャルのすべての最初の文字であるAFGDを格納します。charsinitlett[MAX]は、イニシャルのすべての最初の文字であるBGFDを格納します。
問題は、strlen(finitlett)を出力すると、その数がファイル内のエントリの数よりも大きくなることです。
これは、次のようにエントリを取得して配列に配置するために作成したコードです。
void readf(char finitlett[], char sinitlett[], char name[][80])
{
char fileName[20] = "text.dat";
FILE*inFile = NULL;
inFile = fopen(fileName, "r");
if (inFile == NULL)
{
printf("Error in opening the file %s\n", fileName);
exit(0);
}
int i = 0;
while(fscanf(inFile, "%c%c%80[^\n]\n", &finitlett[i], &sinitlett[i], &name[i]) != EOF){
printf("Initials : %c%c | Name : %s\n", finitlett[i], sinitlett[i], name[i]);
i++;
}
fclose(inFile);
printf("Number of entries: %d\n", i);
printf("Length of array: %d\n", strlen(finitlett));
printf("Length of array: %d\n", strlen(sinitlett));
}