Как читать файл символ за символом, а затем сохранять их в динамически распределяемый массив - PullRequest
0 голосов
/ 01 марта 2019

У меня есть этот проект на С для школы, и у меня есть проблема.Я прочитал почти все темы по этому вопросу, но ни одна из них не ответила на мой вопрос, поэтому я прошу вашей помощи ... Я создал структуру, в которой есть указатель на массив символов,и у меня есть файл с int и char.

Я хотел бы создать функцию read_file, которая будет считывать этот файл символ за символом, а затем сохранять их в динамически распределенном массиве.Но, во-первых, я не знаю, как читать символ за символом, а во-вторых, я не знаю, как поместить эти символы в массив ...

Вот что я написал до сих пор:

char* main(int argc, char *argv[]){
  FILE *p_file;
  char* code = malloc(1000*sizeof(char));
  char* p = code;
  p_file = fopen(argv[1],"rb+");
  while((ch=getc(p_file)) != EOF){
    *p++ = (char)fgetc(p_file);
  } 
  return code;
  free(code);

Не могли бы вы осветить меня или отправить ссылку, которая может помочь?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Проверенный код ниже.

Включение заголовков:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

Функция:

char* readFile(const char const* filename)
{
    FILE* fh = fopen(filename, "r");
    char* result = NULL;

    if (fh != NULL) {
        size_t size = 1;

        while (getc(fh) != EOF) {
            size++;
        }

        result  = (char*) malloc(sizeof(char) * size);
        fseek(fh, 0, SEEK_SET); //Reset file pointer to begin

        for (size_t i = 0; i < size - 1; i++) {
            result[i] = (char) getc(fh);
        }

        result[size - 1] = '\0';
        fclose(fh);
    }

    return result;
}

Использование:

char* result = readFile("test.txt");

if (result != NULL) {
    printf("%s\n", result);
    free(result);
}

Проверьте это:
https://en.cppreference.com/w/c/io/fgetc
https://en.cppreference.com/w/c/memory/malloc

Надеюсь, эта помощь.

0 голосов
/ 01 марта 2019

Проверьте документацию на fread () и / или fgetc () о чтении.Что касается массива, ну, это зависит от того, является ли он массивом char (например, char arr [100]), тогда вы можете поместить их туда, как только продолжите их читать.Надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...