gpt4 book ai didi

基于 fstat 的 c 动态数组大小

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:23 27 4
gpt4 key购买 nike

我使用 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 = 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;

您现在使用的是一个有趣但有点危险的功能,称为“可变长度数组”。也就是说,您声明一个长度在运行时计算的数组。这种方法的问题在于它使用堆栈,并且无法在空间不足时通知您。

关于基于 fstat 的 c 动态数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11392513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com