我正在用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字节),我仍然会出现分段错误......
答案 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点数组。