Считывание текстового файла - 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(), указатель чтения будет указывать на последний байт файла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д