C - 读取文件和分段错误

时间:2013-03-25 14:52:07

标签: c linux file readfile

我正在用C编写一个程序(eclipse在linux中),所以我需要打开一个大文本文件并读取它(而不是每次尝试使用不同大小的缓冲区)

无论如何,这是代码,我不明白为什么我从open函数中获得分段错误

int main(void)
{
    int fd;
    char* buff[67108864];
    FILE *testfile;
    double dif;
    fd = open("testfile.txt", O_RDONLY);
    if (fd>=0) {
        read(fd,buff,67108864);
        close(fd);      }

    return 0;
}

我已编辑了我的问题,但现在如果我将缓冲区更改为我需要的最大尺寸(67108864字节),我仍然会出现分段错误......

3 个答案:

答案 0 :(得分:4)

char buff;

应该是一个指针

char *buff;

同样在阅读read(fd,buff,(sizeof(char)));后,您应该使用realloc为buff增加更多内存。

答案 1 :(得分:2)

如果你想将内存分配给buff,你需要将它作为一个指针..

char* buff;

还注意到你只分配了一个char ..你应该考虑一下,我想你想要使用更多的内存..

另一个常见的事情是不使用动态内存进行文件读取..

尝试:

char buff[100]; 

然后只是相同的代码...

read(fd,buff,100));

然后继续读取直到find完成,read返回实际读取的字节数。

同样如上所述,您在初始化之前使用的是testfile ..这也是一种访问冲突

答案 2 :(得分:0)

变化

char* buff[67108864]

char buff[67108864]

你需要的是一个char数组,而不是char点数组。