реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
Jenya7
сообщение Nov 14 2017, 06:41
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Такой вопрос. Я должен прочитать из файла проверочную сумму, 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 - Nov 14 2017, 08:01
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 14 2017, 08:32
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
char *checksum_buff = "";
Так нельзя - затрете память. Нужно явно выделять буфер для чтения
Цитата
но байты могут быть записаны и со второй строчки.
У вас байты или символы? Для байтов понятие 'строчка' неопределено.
Для позиционирования в файле есть функция fseek - перемещайтесь куда надо и читайте

Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 14 2017, 09:32
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF.
Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb")
но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла.
while( !feof(fd) ) чем не устраивает ?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Nov 14 2017, 09:48
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(k155la3 @ Nov 14 2017, 14:32) *
Код
[quote]   while (   (c = fgetc(file)   ) != EOF)[/quote]

Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF.
Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb")
но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла.
while( !feof(fd) ) чем не устраивает ?

спасибо. я даже не знал о feof.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 12:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016