Чтение файла - C (СИ)
Формулировка задачи:
Почему ничего не выводится в мейне по указателю pReadData, а в функции выводится?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int read_file(FILE *pFile, char *pReadData);
int main(int argc, char *argv[]) {
if(argc < 2) {
perror ("Error arg < 2");
return 1;
}
char *pFilename = argv[1];
printf("read file %s\n", pFilename);
FILE *pFile = fopen (pFilename, "r");
if (pFile == NULL) {
perror ("Error opening file");
fclose (pFile);
return errno;
}
char *pReadData = NULL;
if(read_file(pFile, pReadData) == 0) {
printf("read data:\n%s\n", pReadData);
}
fclose (pFile);
free (pReadData);
return 0;
}
int read_file(FILE *pFile, char *pReadData) {
fseek (pFile , 0 , SEEK_END);
long lSize = ftell (pFile);
rewind (pFile);
pReadData = (char*) malloc ( sizeof(char) * lSize );
if (pReadData == NULL) { fputs ("Memory error", stderr); return 1; }
size_t result = fread (pReadData, 1, lSize, pFile);
if (result != lSize) { fputs ("Reading error", stderr); return 2; }
printf("read data:\n%s\n", pReadData);
return 0;
}Решение задачи: «Чтение файла»
textual
Листинг программы
if(read_file(pFile, &pReadData) == 0) {
Объяснение кода листинга программы
- Входные данные: pFile - указатель на файл, pReadData - указатель на структуру данных, которая будет заполнена при успешном чтении файла.
- Вызов функции read_file(pFile, &pReadData), где pFile - это указатель на файл, а &pReadData - это указатель на структуру данных, в которую будут записаны данные из файла.
- Оператор сравнения if(read_file(pFile, &pReadData) == 0) проверяет, успешно ли было выполнено чтение файла. Если чтение прошло успешно, то значение переменной read_file равно 0.
- Если чтение файла было успешным, то выполняется блок кода внутри фигурных скобок.
- В данном случае, код внутри фигурных скобок отсутствует, поэтому выполнение программы прекращается.