Чтение файла посимвольно в C

Схема:

  • Отсутствие пользователей, общественных / маленьких общественный
28
задан Naveed S 17 February 2013 в 07:57
поделиться

3 ответа

В вашем коде есть ряд проблем:

char *readFile(char *fileName)
{
    FILE *file;
    char *code = malloc(1000 * sizeof(char));
    file = fopen(fileName, "r");
    do 
    {
      *code++ = (char)fgetc(file);

    } while(*code != EOF);
    return code;
}
  1. Что если размер файла превышает 1000 байт?
  2. Вы увеличиваете code каждый раз Вы читаете символ и возвращаете code обратно вызывающей стороне (даже если он больше не указывает на первый байт блока памяти, как он был возвращен malloc).
  3. Вы приводите результат fgetc(file) к char. Вам нужно проверить на EOF перед приведением результата к char.

Важно сохранить исходный указатель, возвращенный malloc, чтобы вы могли освободить его позже. Если мы пренебрегаем размером файла, мы можем достичь этого еще с помощью следующего:

char *readFile(char *fileName)
{
    FILE *file = fopen(fileName, "r");
    char *code;
    size_t n = 0;
    int c;

    if (file == NULL)
        return NULL; //could not open file

    code = malloc(1000);

    while ((c = fgetc(file)) != EOF)
    {
        code[n++] = (char) c;
    }

    // don't forget to terminate with the null character
    code[n] = '\0';        

    return code;
}

Существуют различные системные вызовы, которые дадут вам размер файла; распространенным является stat .

37
ответ дан 28 November 2019 в 03:09
поделиться

Я думаю, что наиболее существенной проблемой является то, что вы увеличиваете code, когда читаете материал, а затем возвращаете конечное значение code, то есть вы будете возвращать указатель на конец строки. Возможно, вы захотите сделать копию code перед циклом и вернуть ее вместо этого.

Кроме того, строки C должны заканчиваться нулем. Вам нужно убедиться, что вы ставите '\0' сразу после последнего прочитанного вами символа.

Примечание: Вы можете просто использовать fgets(), чтобы получить всю строку за один удар.

2
ответ дан 28 November 2019 в 03:09
поделиться

файл открывается и не закрывается для каждого вызова функции также

2
ответ дан 28 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: