jenya7 0 14 ноября, 2017 Опубликовано 14 ноября, 2017 (изменено) · Жалоба Такой вопрос. Я должен прочитать из файла проверочную сумму, 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; Изменено 14 ноября, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба char *checksum_buff = "";Так нельзя - затрете память. Нужно явно выделять буфер для чтения но байты могут быть записаны и со второй строчки.У вас байты или символы? Для байтов понятие 'строчка' неопределено. Для позиционирования в файле есть функция fseek - перемещайтесь куда надо и читайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба [quote] while ( (c = fgetc(file) ) != EOF)[/quote] Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF. Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb") но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла. while( !feof(fd) ) чем не устраивает ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба [quote] while ( (c = fgetc(file) ) != EOF)[/quote] Вы читаете байт из файла, и ИМЖЕ проверяете файл на EOF. Файл-то, конечно, открыт в текстовом режиме ("r" а не "rb") но если так, то этого текстового EOF по getc мы уже не получим, тк оно (0x1A кажется) за границей текстового файла. while( !feof(fd) ) чем не устраивает ? спасибо. я даже не знал о feof. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться