Как указывалось в других ответах, вы передаете printf строку, которая не может быть NULL завершена. Вы также не проверяете, что прочитанный файл превышает 100 байт. Последний пункт, в fread()
, вы поменяли параметры size_t size
и size_t niters
.
Вот модифицированная версия вашей программы, которая устраняет вышеупомянутые проблемы (и очищает распорный немного):
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
FILE *fr;
char c[1];
struct stat sb;
// obtains information about the file
if (stat(argv[1], &sb) == -1)
{
perror("stat()");
return(1);
};
// verifies the file is over 100 bytes in size
if (sb.st_size < 101)
{
fprintf(stderr, "%s: file is less than 100 bytes\n", argv[1]);
return(1);
};
// opens the file, or prints the error and exists
if (!(fr = fopen (argv[1], "r")))
{
perror("fopen():");
return(1);
};
fseek(fr, 100, SEEK_CUR);
while (fread(c, sizeof(c), 1, fr) > 0)
printf("%c", c[0]);
fclose(fr);
return(0);
}
Вы также могли бы улучшить эффективность чтения файла путем изменения char c[1];
к чему-то линии char c[1024];
и обновление заявление в то время как:
while (fread(c, sizeof(char), 1023, fr) > 0)
{
c[1023] = '\0';
printf("%s", c);
};
Обратите внимание, что чтение более чем в 1 байт за раз, а затем с использованием printf предполагает, что входной файл является текстовым файлом без символов NULL. –