Перейти к содержанию
    

Такой вопрос. Я должен прочитать из файла проверочную сумму, 8 байт

if (IsFileExists(checksum_file))
{
    FILE *file;
    char *checksum_buff = "";
    file = fopen(checksum_file, "r");
                            
    fread(checksum_buff, 8, 1, file);
    fclose(file);
}

один из аргументов fread функции - сколько байт прочитать. но байты могут быть записаны и со второй строчки. как задать считываемый размер?

 

а если так?

if (IsFileExists(checksum_file))
   {
       FILE *file = fopen(checksum_file, "r");
       char buff[1024];
       char c;
       int char_count = 0;
       int i = 0;
       
       fseek(file, 0, SEEK_SET);
       
        while ((c = fgetc(file)) != EOF)
        {
            if (isalnum(c))
            {
                buff[i++] = (char) c;
                char_count++;
            }
            
            if (char_count == 8)
               break;
        }

        buff[i] = '\0'; 
        
        fclose(file);
   }

 

странно - у меня на строке while ((c = fgetc(file)) != EOF) ругается

Warning[Pe514]: pointless comparison of unsigned integer with a negative constant

char у меня в IAR знаковый.

 

понял - int c;

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

char *checksum_buff = "";
Так нельзя - затрете память. Нужно явно выделять буфер для чтения

но байты могут быть записаны и со второй строчки.
У вас байты или символы? Для байтов понятие 'строчка' неопределено.

Для позиционирования в файле есть функция fseek - перемещайтесь куда надо и читайте

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[quote]   while (   (c = fgetc(file)   ) != EOF)[/quote]

Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF.

Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb")

но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла.

while( !feof(fd) ) чем не устраивает ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[quote]   while (   (c = fgetc(file)   ) != EOF)[/quote]

Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF.

Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb")

но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла.

while( !feof(fd) ) чем не устраивает ?

спасибо. я даже не знал о feof.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...