3

C で fgets を使用してプレーン テキスト ファイルを読み込もうとすると、最初の行に奇妙な出力が表示されます。したがって、最初の行が「hello」の場合、「ELFh` �� 20120918 (prerelease)@xxhello」のようになります。コードは次のとおりです。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    FILE *fr;
    int i;
    extern int uniq(char *previous_word, char *current_word);
    char *line1 = malloc(500);
    char *line2 = malloc(500);
    char *temp;
    for(i = 0; i<argc; i++)
    {

        fr = fopen (argv[i], "r");
        while(fgets(line2, 499, fr) != NULL)
        {
            uniq(line1, line2);
            temp = line1;
            line1 = line2;
            line2 = temp;
        }
        fclose(fr);
    }
    return 0;
}
int uniq(char *previous_word, char *current_word) {
    if(!(current_word))
        return 1;
    if(strcmp(previous_word, current_word))
        printf("%s", current_word);
    return 0;
}

Google とスタック オーバーフローでこの問題について説明できるすべての説明を検索しましたが、それを修正するものはまったく見つかりません。

4

1 に答える 1

4

ループはインデックス 1 から開始する必要があります。argv[0]は実行可能ファイルです。

argv[0]いわゆるマルチバイナリ実行可能ファイルがある場合は、確認すると便利です。そこでは、1 つのバイナリだけでさまざまなコマンドを処理できます。これは、メモリを節約する必要がある組み込みシステムで非常に役立ちます。

于 2012-10-31T06:15:32.747 に答える