Заполнение массива malloc при чтении из файла - PullRequest
1 голос
/ 15 апреля 2019
// Trying to store the the data from a text file into an array
  char *buff(const char *path){
    int end = 0;
    char * buf;
    int f_write = open(path,O_RDONLY);
    end = lseek(f_write,0,SEEK_END);
    buf =(char*)malloc(sizeof(char*)*(end+1));
    read(f_write,buf,end+1);
    close(f_write);
    buf[end+1]= '\0';
    printf("%s\n",buf);//Prints empty line because buf has not been populated
    return buf;
 }

Я пытаюсь создать функцию, которая открывает файл, затем я использую lseek для подсчета количества данных, которые у меня есть в файле, затем я делаю массив массивов buf с количеством подсчитанных данных и считываю из файла и заполнить массив buf. Затем функция возвращает массив buf. * ​​1002 *

Проблема, с которой я столкнулся, заключается в том, что по какой-то причине мой массив buf не заполняется данными из файла. Таким образом, printf выводит пустую строку в функции buff. Есть мысли о том, почему это происходит?

1 Ответ

0 голосов
/ 16 апреля 2019

Он печатает пустое значение, потому что вы делаете это

  1. Перемещение файла ponter в конец файла с помощью функции lseek и его запоминание до конечной переменной.

  2. Чтение в буферную переменную из файла , начиная с указателя файла, перемещенного в конец файла.

Вы пытаетесь прочитать файл, который начинается с конца, и это нормально, что он ничего не возвращает в бафф.

Попробуйте это:

char *buff(const char *path){
 int end = 0; char * buf; int f_write = open(path,O_RDONLY); 
 end = lseek(f_write,0,SEEK_END);
 //now you have to move the file pointer back to the start of the file
 lseek(f_write,0,SEEK_SET);
 buf =(char*)malloc(sizeof(char*)*(end+1));
 read(f_write,buf,end+1); close(f_write);
 //EDIT
 buf[end]= '\0'; printf("%s\n",buf);
}

Дайте мне знать, если это решено:)

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