c基于fstat的动态数组大小

pol*_*nux 0 c arrays

我使用fstat来获取文件大小.我想使用此大小声明一个数组,然后用另一个fstat更改大小并重新使用相同的数组.例:

fstat(file1, &fileStat);
fsize = filestat.st_size;
char filebuffer[size-of-file1];
/* do something */
fstat(file2, &fileStat);
fsize = filestat.st_size;
char filebuffer[size-of-file2];
/* do something */
Run Code Online (Sandbox Code Playgroud)

显然我不能重新声明filebuffer数组,我必须声明一个新的.但是,如果我想重新使用不同大小的相同数组,我该怎么办?
谢谢!!

编辑:

filebuffer = malloc(fsize);
if(filebuffer == NULL){
    perror("malloc");
    onexit(sockd, 0, fd, 4);
}
Run Code Online (Sandbox Code Playgroud)

tmpfilebuf = realloc(filebuffer, fsize);
if(tmpfilebuf){
    filebuffer = tmpfilebuf;
}
else{
    perror("realloc");
    free(filebuffer);
    onexit(sockd, 0, fd, 4);
}
Run Code Online (Sandbox Code Playgroud)

但现在我得到了一个段错误:(

cni*_*tar 5

不要使用可变长度数组.使用malloc第一次然后realloc根据需要.

char *filebuffer;    
filebuffer = malloc(...);

tmp = realloc(filebuffer, ...);
if (tmp)
    filebuffer = tmp;
Run Code Online (Sandbox Code Playgroud)

您现在使用的是一个有趣且有些危险的功能,称为"可变长度数组".也就是说,您声明一个在运行时计算长度的数组.这种方法的问题在于它使用堆栈,如果没有足够的空间,则无法通知您.