Чтение файла целиком в память - C (СИ)
Формулировка задачи:
Помогите пожалуйста дописать программу.
Задание:
Считать файл целиком в память. В результате должен получиться массив байтов по размеру и содержанию совпадающий с файлом. До free(p) ничего менять не надо вроде, только после нужно дописать, а вот что дописать я не знаю.
#include <stdio.h> #include <stdlib.h> #include <string.h> void kill(int i, char p[]) { while(i>=1) { free(p[i]); i--; } } int main(int argc, char *argv[]) { FILE *in; char c, *q, *p; p=NULL; int i=0; if (argc >= 1) { in=fopen(argv[1],"r"); if (in == NULL) return 0; while (1) { c=fgetc(in); if (c==-1) break; q=(char *)malloc(i+1); memcpy (q, p, i); free(p); *(p+i)=c; printf("%c", *(p+i)); i++; } fclose(in); printf("sizeof(p)=%d\n", sizeof(*p)*i); kill(i, p); } return 0; }
Решение задачи: «Чтение файла целиком в память»
textual
Листинг программы
#include <cstdio> #include <cstdlib> #include <cstddef> int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <file_name>\n", argv[0]); return -1; } FILE *infile; infile = fopen(argv[1], "rb"); if (infile == NULL) { printf("%s does not exist.\n", argv[1]); return -1; } fseek(infile, 0, SEEK_END); size_t file_size = ftell(infile); rewind(infile); char *buffer = (char*)malloc(file_size * sizeof(char)); if (buffer == NULL) { fclose(infile); printf("Error allocating %d bytes.\n", file_size * sizeof(char)); return -1; } size_t bytes_read = fread(buffer, sizeof(char), file_size, infile); if (bytes_read != file_size) { printf("Have read only %d bytes of %d.\n", bytes_read, file_size); free(buffer); fclose(infile); return -1; } printf("Read successfull. Read %d bytes.\n", bytes_read); free(buffer); fclose(infile); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и памятью
- Проверка наличия файла, передаваемого в качестве аргумента командной строки
- Открытие файла в бинарном режиме
- Проверка успешного открытия файла
- Переход к последнему байту файла
- Определение размера файла в байтах
- Возврат файла в начало (смещение 0)
- Выделение памяти под буфер для чтения файла
- Проверка успешного выделения памяти
- Чтение файла в буфер
- Проверка количества прочитанных байт на соответствие размеру файла
- Вывод сообщения об успешном чтении файла
- Освобождение памяти, выделенной под буфер
- Закрытие файла
- Вывод сообщения о завершении работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д