如何修复C中局部变量错误的函数返回地址?

如何修复C中局部变量错误的函数返回地址?,c,C,我有一个读取文件的方法,但是当我试图运行它时,它给了我一个返回(char*)缓冲区的错误 错误:警告:函数返回局部变量的地址[-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) {

我有一个读取文件的方法,但是当我试图运行它时,它给了我一个
返回(char*)缓冲区的错误

错误:
警告:函数返回局部变量的地址[-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";
}
我应该在该方法的main之外的方法之前创建缓冲区吗


PS:我知道这可能是一个重复的问题。

首先,从
返回“error”
判断,您希望
缓冲区是一个字符数组,而不是指向字符的指针数组。首先解决这个问题

对于局部变量问题,只需将函数修改为:

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

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

所以您想要一个
char*
数组?这很有趣。不清楚为什么有
char*buffer[len]然后通过cast返回一个
char*
?为了避免返回局部变量指针,您可以(1)在函数调用之前创建缓冲区并将缓冲区地址传递给函数,或者(2)函数可以使用
malloc
动态分配缓冲区并返回该指针,只要调用方在不再需要时释放内存。选项2更容易发生内存泄漏。@Bathsheba是的,就像在字符串字符数组中一样。让调用者分配空间,被调用者填充您需要强制转换的数据。返回值应该清楚地表明您做错了什么。