我使用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 */

显然我不能重新声明filebuffer数组,我必须声明一个新的数组。但是如果我想用不同大小的数组来重复使用,我该怎么做呢??
谢谢!!
编辑:
filebuffer = malloc(fsize);
if(filebuffer == NULL){
    perror("malloc");
    onexit(sockd, 0, fd, 4);
}


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

但现在我有一个错误:(

最佳答案

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

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

tmp = realloc(filebuffer, ...);
if (tmp)
    filebuffer = tmp;

您现在使用的是一个有趣而又有点危险的特性,称为“可变长度数组”。也就是说,声明一个在运行时计算长度的数组。这种方法的问题是它使用堆栈,如果没有足够的空间就无法通知您。

10-06 07:37