2014-10-11 3 views
-5

나는 나의 운동을 극복하려고 노력하고있다. 나는 한 줄에 정수로 구분 된 n (10^6까지) 정수를 입력하고 합쳐야한다. 예 : 나는 문자 배열 등의 해당 라인을 판독하기로Sigsegv 오류, 뭐가 잘못 되었나요?

int n; 
long long int sum; 
scanf("%d\n", &n); 
      while(n--){ 
       scanf(" %d", &value); 
       suma+= value; 
      } 

0 1 541 10 54 100,000,000 ...

난 scanf와 시도했지만 (알고리즘 만 초이기 제한)는 많은 시간을 소요 그런 다음 공백을 구분 기호로 사용하여 분할합니다.

int n; 
long long int sum; 
scanf("%d\n", &n); 
char tab[n]; 
scanf("%[^\n]s", tab); 
char* split=strtok(tab," "); 

    while(split != NULL){ 
     suma += atoi(split); 
     split=strtok(NULL," "); 
    } 

그러나이 작동하지 않습니다/아마 배열의 경계에 문제가있는 것입니다,하지만 난 잘 모르겠어요 내가이 오류를 복구 할 수 없습니다.

+1

충돌을 일으키기 위해 어떤 입력을 제공합니까? '수마 '란 무엇입니까? – NPE

+1

'char tab [n];을 수행하기 전에'n> 0'을 검사하면 버퍼 오버 플로우를 일으키는 다음 scanf에 대한 보호가 없습니다. 'n'에 '0'또는 '1'을 입력하면 문제가 설명됩니다. –

+0

첫 번째 숫자로 'n'이 처음으로 스캔 된 것은 무엇입니까? 총 문자열 길이로 * 사용하고 있습니다. – usr2564301

답변

0

인수를 받으려면 strtok()에 대한 마지막 호출을 수정하십시오. NULL의 ++ split instad

+0

그게 효과가 없습니다. 내가 split = strtok (NULL, ""); ~ split = strtok (++ split, ""); 첫 번째 루프 이후 멈춘 프로그램 – Kuba

관련 문제