0

次のように構造化されたファイルから、人のイニシャルの文字を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));
}
4

1 に答える 1

0

配列を「\0」文字で初期化していることを確認してください。Strlenは、最初の「\ 0」文字を見つけることで機能します。配列にこれらの文字が完全に入力されていない場合、strlenは、文字列の一部としてchar配列に残っている「ガベージデータ」をカウントする可能性があります。

于 2012-12-11T22:24:29.490 に答える