如何修复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是的,就像在字符串字符数组中一样。让调用者分配空间,被调用者填充您需要强制转换的数据。返回值应该清楚地表明您做错了什么。