1

皆さん、こんにちは。 私は初心者で、2 つの文字列が等しい場合に数値を出力することを主な目的とするコードを作成しています。最初の文字列はファイルから取得され、2 番目の文字列は比較対象の文字列です。

コード:

int main()
{
char *string[2];
FILE *stream;
stream = fopen("REL","r");
if( (stream = fopen("REL","r")) == NULL)
{  
    printf("Can't open %s\n","REL");
    exit(1);
}
for(int i=0;i<92;i++)
{
    fscanf(stream,"%s",&string);
    if( strcmp("20", *string) == 0 )
    {
        printf("%d",20);
    }
}
fclose(stream);
}

そして...シェルでテストすると、プロンプトが表示されます:

~/CM$ ./file2 
Segmentation fault (core dumped)

私はばかげた間違いをしているかもしれません。しかし、初心者として、スクリプトの何が問題なのかわかりません。

4

2 に答える 2

3

string2 の単位化された配列ですchar*fscanfがメモリに書き込もうとしていますが、書き込みを行うべきではありません。stringchar の配列として宣言します。

char string[256];

と:

fscanf(stream, "%255s", string); /* Limit number of
                                    chars read to prevent buffer overrun. */
于 2012-05-24T21:40:54.197 に答える
1

これを試して:

char string[128];
fscanf(stream, "%s", string);

その後:

if (!strcmp("20", string)) {
    /* The strings are equals */
}
于 2012-05-24T21:43:30.483 に答える