2016-03-01 62 views
-1

我有这种读取文件的方法,但是当我尝试运行它时,它给我一个return (char *) buffer的错误。如何修复函数返回C中局部变量错误的地址?

错误:warning: function returns address of local variable [-Wreturn-local-addr]

char * readFile(char* filename, size_t chunk) { 
    FILE *proc; 
    size_t len = chunk; 
    char * buffer[len]; 
    proc = fopen(filename, "r"); 
    if(proc) { 
     if(buffer) 
      fread(buffer, 1, len, proc); 
     fclose(proc); 
     return (char *) buffer; 
    }return "error"; 
} 

我应该之外的主要方法这个方法之前,创建缓冲? PS:我知道这可能是一个重复的问题。

+4

所以你想要一个'char *'数组?那很有意思。 – Bathsheba

+0

不清楚为什么你有'char * buffer [len];'然后你通过转换返回一个'char *'?为避免返回局部变量指针,可以(1)在函数调用之前创建缓冲区,并将缓冲区地址传递给函数,或者(2)函数可以使用'malloc'动态分配缓冲区并返回该指针只要调用者在不再需要时释放内存。选项2更容易出现内存泄漏。 – lurker

+0

@Bathsheba是的,如在一个字符串字符数组。 – Anonymous

回答

1

首先,从return "error"判断,您希望buffer是一个字符数组,而不是指向字符的指针数组。先解决这个问题。

至于局部变量的问题,简单地修改函数到这一点:

void readFile (const char* filename, size_t chunk, char buffer[chunk]) 

这迫使调用者处理分配和你的函数只需要关注其指定的任务。

相关问题