缓冲区大小和从文件读取

时间:2013-03-25 15:31:39

标签: c linux

我已经问了一个类似的问题,但我认为现在问题不同了...... 我在eclipse,linux机器上用C语言写作。

我需要读取测试文件,每次尝试使用不同的缓冲区大小... 我知道如果缓冲区的大小太小,我需要多次在缓冲区上运行,但我不知道怎么做...

这是我的代码(当我在缓冲区上运行时,大小为67108864即时分区错误。  *我编辑了我的代码

int main(void)
{   int fd;
    char* buff = malloc (67108864);
    if (buff){
    fd = open("testfile.txt", O_RDONLY);
    if (fd >= 0) {
        while (read(fd,buff,67108864)!=0){}
        close(fd);
    }
    }
free(buff);
return 0;
}

2 个答案:

答案 0 :(得分:5)

这不是char[]

char* buff[67108864];

但是是char*的数组。改为:

char buff[67108864];

此外,buff的大小可能对于堆栈而言太大。堆栈的典型大小为1MB(1048576字节),但buff的大小远远超过(64MB!),这将导致堆栈溢出错误。如果您希望使用此缓冲区,请使用malloc()动态分配,然后使用free()稍后发布:

char* buff = malloc(67108864);
if (buff)
{
    /* Use 'buff' and then release it. */

    free(buff);
}

答案 1 :(得分:4)

删除*,你声明了一个指针数组,但你需要一个字符数组。

   char buff[67108864];

我不确定67108864它对于堆栈来说太大了。尝试在堆上制作它。