2013-10-09 2 views
-7
// C Program to find average of numbers given by user 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void main() 
{ 
    double sum = 0; 
    int ii = 0, c; 
    char buf[256], *token; 

    printf 
     ("Enter the numbers to average on a single line, separated by space and press enter when done\n"); 
    fgets(buf, 255, stdin); 
    token = strtok(buf, " "); 
    while (token != NULL) 
    { 
     sum += atof(token); 
     ii++; 
     token = strtok(NULL, " "); 
    } 
    printf("Average is %lf", sum/(double)ii); 
} 

온라인 8 : char buf [256], * token; 배열 제한을 11111111, 6829786907과 같은 8 자리 숫자로 변경하면 프로그램이 적용되지만 출력시 '세그먼트 오류'가 표시됩니다. 배열 한도를 어떻게 늘릴 수 있습니까? UNIX 기반 시스템을 사용하고 있습니다. 도와주세요 :)C에서 배열 제한을 늘리는 방법은 무엇입니까?

+0

Hmmmmm. 다시!! 나는 당신의 컴파일러에 문제가 있다고 생각한다. – haccks

+0

난 그 대답에 대한 답변을 얻지 못했습니다 – user2583127

+0

@haccks 당신은 dat을 시도해 볼 수 있습니까 99999999 ur 컴파일러의 배열 크기? – user2583127

답변

1

수 없습니다. 6829786907 배열을 요청하면 6829786907 바이트가 필요합니다. 그것은 숫양의 거의 7Go이다. 하나는 7Gio를 한 번에 할당하지 않습니다. 또한 거대한 버퍼를 갖는 목표는 무엇입니까?

편집 : 당신이 char buf[256];을 쓸 때, 당신은 당신에게 크기의 연속 메모리 청크를 제공하기 위해 OS를 문의 256 *를 sizeof (숯불) = 256 당신이 char buf[6829786907];를 작성하는 경우, 당신은 엄청나 다 7Go, 당신의 OS를 물어 단지 이 메모리 덩어리를주지 마라. 당신은 printf("buf adress: %p", buf);으로 이것을 확인할 수 있습니다. rint는 0x00000000입니다. 이것은 당신에게 공간이 없다는 것을 의미합니다. 그런 다음 포인터를 사용하면 (fgets() 호출에서) 세그먼트 화 오류가 발생합니다. Seg 오류는 소유하지 않은 메모리 주소를 읽거나 쓸 때 발생합니다. 여기 buf 일명 0x00000000.

+0

나는 char * buf = malloc을 시도했다. (9999999999); 그리고 효과가 있습니다! 하지만 999999999999999999999 (ok thats ridiculous!)와 같은 숫자를 추가하면 다음 오류가 발생합니다. 정수 상수 오버플로 – user2583127

+0

char 데이터 형식을 사용했습니다. 나는 무엇을 사용해야합니까 ?? 또한 배열의 무한 크기를 정의 할 수 있습니까 ?? – user2583127

+1

그것은 절대적인 감각이 아닙니다. 프로그래밍에 관한 책 읽기 –

관련 문제