繁体   English   中英

基于fstat的c动态数组大小

[英]c dynamic array size based on fstat

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM