C:返回指向内存数据的函数

时间:2015-10-24 20:29:02

标签: c pointers malloc

我试着编写一个函数,当调用时读取某个日期(可以是文件或矩阵,这不重要)并返回指向该数据的指针。我尝试了以下代码:

#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);
}

但它没有返回我期望的内容(/ etc / passwd文件的内容)。

在这种情况下,我做错了什么?

干杯!

2 个答案:

答案 0 :(得分:1)

如果您想从文件中读取,则需要使用fread。在您的代码中,memcpy只是从FILE指针而不是文件进行复制。

答案 1 :(得分:1)

您没有在readfile_malloc中将文件内容读入f1。你是从文件描述符(fd)的地址到f1的memcpy。你需要用fread阅读内容。