Вы не выделили место для буфера.
Указатель str
является просто висящим указателем. Таким образом, ваша программа эффективно выводит данные, прочитанные из файла, в область памяти, которой вы не владеете, что приводит к ошибке сегментации.
Вам нужно:
char *str;
str = malloc(BUFSIZ); // this is missing..also free() the mem once done using it.
или просто:
char str[BUFSIZ]; // but then you can't do str++, you'll have to use another
// pointer say char *ptr = str; and use it in place of str.
РЕДАКТИРОВАТЬ:
Есть еще одна ошибка в:
while (fgets(str, sizeof BUFSIZ, file))
Второй аргумент должен быть BUFSIZ
, а не sizeof BUFSIZ
.
Почему?
Потому что 2-й аргумент - это максимальное количество символов, которые должны быть считаны в буфер, включая нулевой символ. Поскольку sizeof BUFSIZ
равно 4
, вы можете прочитать max до 3
char в буфер. Вот почему 19381
читается как 193
, а затем 81<space>
.