Считывание текстового файла - C (СИ)
Формулировка задачи:
Здравствуйте. Была задачка - написать программу, которая выводит на экран содержимое текстового файла. Путь к файлу вводится пользователем. Вроде написал, все работает: Решил немного доделать - в существующем коде ограничение на вывод каждой строки стоит в 1000 символов, хотел совсем убрать. Дописал код, чтобы считал размер файла в байтах, на строку выделяю память, по этому размеру. Вроде бы размер файла считает правильно, но, при выводе информации из файла, вместо текста идут иероглифы и знаки равно((
Вот что получилось, но работает не корректно:
Понимаю, что, скорее всего, напутал с выделением памяти, но не могу понять где и как. Помогите отладить, пожалуйста.
#define _CRT_SECURE_NO_WARNINGS
#include <io.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define MAX_STR 1000
void main()
{
FILE *file;
char failway[200];
char str[MAX_STR];
printf("Enter way to the file\n");
scanf("%s", &failway);
file = fopen(failway, "r");
if (file == NULL)
{
printf("Error!");
}
else
{
while (!feof(file))
{
fgets(str, MAX_STR, file);
puts(str);
}
}
fclose(file);
system("pause");
}#define _CRT_SECURE_NO_WARNINGS
#include <io.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define MAX_STR 1000
void main()
{
int counter = 0;
FILE *file;
char failway[200];
printf("Enter way to the file\n");
scanf("%s", &failway);
file = fopen(failway, "r");
if (file == NULL)
{
printf("Error!!!");
}
else
{
fseek(file, 0, SEEK_END);
counter = ftell(file);
printf("%d\n\n", counter);
char *str;
str = malloc(sizeof(char) * counter);
while (!feof(file))
{
fgets(str, counter, file);
puts(str);
}
}
fclose(file);
system("pause");
}Решение задачи: «Считывание текстового файла»
textual
Листинг программы
fseek(file, 0, SEEK_END);
Объяснение кода листинга программы
- В этом коде используется функция fseek(), которая предназначена для перемещения указателя чтения в файле.
- Переменная
fileсодержит дескриптор файла, который используется в функции fseek(). - В функции fseek() первый аргумент - это дескриптор файла, второй аргумент - это смещение от начала файла, а третий аргумент - это смещение от текущей позиции файла.
- В данном случае, мы перемещаем указатель чтения в конец файла, поэтому третий аргумент SEEK_END.
- После выполнения функции fseek(), указатель чтения будет указывать на последний байт файла.