Считывание текстового файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Была задачка - написать программу, которая выводит на экран содержимое текстового файла. Путь к файлу вводится пользователем. Вроде написал, все работает:
#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");
}
Решил немного доделать - в существующем коде ограничение на вывод каждой строки стоит в 1000 символов, хотел совсем убрать. Дописал код, чтобы считал размер файла в байтах, на строку выделяю память, по этому размеру. Вроде бы размер файла считает правильно, но, при выводе информации из файла, вместо текста идут иероглифы и знаки равно(( Вот что получилось, но работает не корректно:
#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);

Объяснение кода листинга программы

  1. В этом коде используется функция fseek(), которая предназначена для перемещения указателя чтения в файле.
  2. Переменная file содержит дескриптор файла, который используется в функции fseek().
  3. В функции fseek() первый аргумент - это дескриптор файла, второй аргумент - это смещение от начала файла, а третий аргумент - это смещение от текущей позиции файла.
  4. В данном случае, мы перемещаем указатель чтения в конец файла, поэтому третий аргумент SEEK_END.
  5. После выполнения функции fseek(), указатель чтения будет указывать на последний байт файла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы