2013-03-25 7 views
0

임 C (리눅스에서 일식)에서 프로그램을 작성을 읽기 때문에 나는 큰 텍스트 파일을 열고 읽기 (그리고보다하는 때마다 버퍼의 diffrent 크기 시도)C - 파일 및 분할 오류

필요 어쨌든,이 코드이며, 임 내 질문을 편집 한하지만 지금은 가장 큰 크기로 내 버퍼를 변경하면 내가 (67,108,864 바이트)가 필요 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; 
} 

에서 세그먼트 오류를 ​​받고 왜 이해가 안 돼요 여전히 분할 오류가 발생하는 메신저 ...

+2

if (ferror (testfile)), errr,'testfile'은 초기화되지 않은 포인터입니다. –

+0

그리고'fclose (testfile)' – BLUEPIXY

+0

@DanielFischer 그래서 대신 무엇이 있어야합니까? – Bobbbaa

답변

2

잘 할당하려면 버프에 모리, 당신은 또한 당신이 단지 하나 개의 문자를 할당 알 .. 그것을 포인터를 만들기 위해

char* buff; 

이 필요합니다 .. 당신은 .. 나는 당신이 더 많은 메모리를 사용하려는 생각

또 다른 일반적인을 것을 고려해야한다 일이 .. 파일 읽기 동적 메모리를 사용하지 않는

시도 :

char buff[100]; 

다음 그냥 같은 코드 ...

read(fd,buff,100)); 

그리고 나서 찾기가 완료 될 때까지 계속 읽기 만하면 실제로 읽은 바이트 수가 반환됩니다.

또한 등 .. 그 또한 액세스 위반을 초기화하기 전에, 당신이 testfile 위를 사용하는 위의 주석

+0

그래도 파일의 예상 내용에 달려 있습니다. –

+0

버퍼 크기를 변경하라는 요청보다 100을 원하는 크기로 변경해야합니다. – Bobbbaa

+0

그래, 나는 그것을 defenition하게 만들 것이다. 그것이 이상 할 때까지 몇 번이나 파일을 읽을 필요가 있을지도 모른다는 것을 기억해라. – Alon

4
char buff; 

당신이 더 할당해야 read(fd,buff,(sizeof(char)));을 읽은 후 포인터를 또한

char *buff; 

을해야한다 realloc로 버프 할 메모리.

0

변화

char* buff[67108864] 

char buff[67108864] 

에 당신이 필요한 것은 문자 배열이 아닌 문자 점 배열입니다.