Переучиваюсь с PHP на C. Есть файл text.txt Мне нужно получить из файла саму строку. Как это сделать?
FILE * handler = fopen("test", "r");
if(handler == NULL){
printf("Cannot open file \n");
exit(1);
}
Не знаю что делать дальше
Переучиваюсь с PHP на C. Есть файл text.txt Мне нужно получить из файла саму строку. Как это сделать?
FILE * handler = fopen("test", "r");
if(handler == NULL){
printf("Cannot open file \n");
exit(1);
}
Не знаю что делать дальше
Когда-то давно написал пару функций для этого. Пара советов по использованию:
Подразумевается, что в обе функции передается валидный указатель на уже открытый (fopen) файл.
Закрывать (fclose) файл нужно в вызывающем коде, ровно как и освобождать (free) созданную строку с содержимым файла.
long get_file_size(FILE* file) {
/* Перемещаемся в конец файла. */
fseek(file, 0, SEEK_END);
/* Получаем текущую позицию в файле (размер). */
const long fsize = ftell(file);
if (fsize == -1)
perror("Can't get the current value of the file position.\n");
/* Перемещаемся в начало файла. */
rewind(file);
return fsize;
}
char* get_text_from_file(FILE* file) {
/* Получаем размер файла и проверяем, успешно ли получение. */
const long fsize = get_file_size(file);
if (fsize == -1)
return NULL;
/* Выделяем память для строки, в которую скопируется содержимое файла. */
char* const src = malloc(fsize+1);
if (src == NULL) {
fprintf(stderr, "Can't allocate %ld bytes for the text of the file.\n", fsize+1);
return NULL;
}
/* Записываем содержимое файла в строку. Добавляем нуль-терминатор. */
const size_t read_size = fread(src, 1, fsize, file);
src[read_size] = '\0';
return src;
}
get_text_from_file() сразу получать (например, через еще один аргумент)
– avp
May 28 '18 at 21:12
get_file_size вызвать.
– eanmos
May 29 '18 at 05:13
fstat(fileno(file), &st_buf);
– avp
May 29 '18 at 17:52
fstat — не знал про такую
– eanmos
May 29 '18 at 18:02
malloc+fread, вестимо. – May 24 '18 at 19:55string(кстати, если хотите, чтобы человек, к которому вы обращаетесь в комментарии увидел оповещение, то используйте @NICK). По поводу вопроса -- да, это не слишком сложная функция. Определяете размер открытого файла (fseek/ftell), выделяете буфер нужного размера (malloc), перматываете файл к началу (rewind) и читаете файл (fread) в этот буфер. – avp May 24 '18 at 21:17