Странные символы при чтении текстового файла с помощью fgets

При попытке прочитать обычный текстовый файл с помощью fgets на C я получаю странный вывод в первой строке. Поэтому, если первая строка предназначена для «привет», она выглядит примерно так: «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 и переполнении стека, и я не могу найти ничего, что могло бы ее исправить.


person Khodeir    schedule 31.10.2012    source источник
comment
Этот ELF выглядит так, будто вы читаете исполняемый файл Linux.   -  person rekire    schedule 31.10.2012
comment
Обратите внимание, что argv[0] - это исполняемый файл вашего приложения, а не первый аргумент, передаваемый вашему приложению, как вы предполагаете. Ознакомьтесь с этой веткой: stackoverflow.com/questions/2020945/argc-and-argv-in-main   -  person Jack    schedule 31.10.2012


Ответы (1)


Ваш цикл должен начинаться с индекса 1. argv[0] — ваш исполняемый файл.

Проверка argv[0] полезна, если у вас есть так называемый мультибинарный исполняемый файл. Там вы можете обрабатывать разные команды всего одним двоичным файлом. Это очень полезно во встроенных системах, где вам нужно экономить память.

person rekire    schedule 31.10.2012
comment
Я исправил некоторые орфографические ошибки, но у меня возникло искушение оставить многодвоичный файл execrable в покое. 8-)} - person Keith Thompson; 31.10.2012
comment
Упс такое бывает, если помочь в метро. - person rekire; 31.10.2012