0

この for ループに問題があり、クラッシュする理由がわかりません。「姓、名」形式の 20 名の入力リストを読み取り、「姓、名」の文字列として保存しようとしています。重複を配列ポインターに格納しないでください。

malloc と比較ループをコメントアウトすると、明らかにアドレスが変わらないという問題があるため、*ary は *walker と同じ値を返します。filePtr は機能し、strcpy および strcat 関数には問題はありません。また、最初の printf を削除すると、プログラムがクラッシュしますが、それを削除しても、出力以外に実際の影響はないようです。

FILE *filePtr = fopen ("input.txt","r");
int size = 20;
char **ary;
char **walker;
char **end;
int strsize = 0;
char firstname[30] = {0};
char lastname[30] = {0};
char *fullname;
ary = calloc (size, sizeof(char *));
printf("%d\n",sizeof(pAry));
for ( walker = ary ; *walker < (*end = *ary + size) ; walker++)
{
    fscanf(filePtr," %s",firstname);
    fscanf(filePtr," %[^\n]",lastname);
    strsize = strlen(firstname) + strlen(lastname) + 3;
    fullname = malloc (strsize * sizeof(char));
    strcpy(fullname,lastname);
    strcat(fullname,", ");
    strcat(fullname,firstname);
    for ( compare = 0 ; compare < walker ; compare++)
    {
        if(strcmp(fullname,*(ary + compare)) != 0)
        {
            diff = 0;
        }
    }
    if (diff)
    {
        strncpy(*walker,fullname,strsize);
        printf("%s\n",*walker);
    }
    free(fullname);
}
4

1 に答える 1