2015-10-24 3 views
-2

Я пытаюсь написать функцию, которая при вызове считывает некоторую дату (может быть файл или матрица, что не имеет значения) и возвращает указатель на эти данные. Я попытался следующий код:C: Возврат функции, указывающей на данные в памяти

#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/io.h> 
#include <sys/mman.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

char * readfile_malloc(const char *filename) { 

    char *f1; 
    struct stat s; 
    int fd; 
    int st; 
    off_t sz; 


    fd = open(filename, O_RDONLY); 
    st = fstat (fd, &s); 
    sz = s.st_size; 

    f1 = malloc(sz); 

    return (char *) memcpy(f1,&fd,sz); 

} 


/* Test function */ 
int main(int argc, const char *argv[]) 
{ 

    char *rfml; 

    rfml = readfile_malloc("/etc/passwd"); 

    printf ("%d\n", (int)sizeof(rfml)); 
    printf ("%s\n", rfml); 

    exit(0); 
} 

Но это не возвращает то, что я ожидал (содержание/и т.д./пароль файл).

Что я делаю неправильно в этом случае?

Cheers!

+3

malloc копии, ну, память, 'read' - это способ, ну, читайте из файла. –

+2

Пожалуйста, прочитайте книгу C. У вас есть фундаментальные недоразумения. – Olaf

+0

Я читал много ;-) Может быть, я что-то пропустил, конечно. – Lin

ответ

1

Если вы хотите прочитать из файла, вам необходимо использовать fread. В вашем коде memcpy просто копирует указатель FILE, а не файл.

1

Вы не читаете содержимое файла в файле f1 в readfile_malloc. Вы memcpy'ing от адреса файлового дескриптора (fd) в f1. Вам нужно прочитать содержимое с помощью fread.

Смежные вопросы