2016-09-18 14 views
0

atoi, strol 및 stoi를 시도했지만 그 중 누구도 나를 위해 일하지 않습니다. 나는 심지어 일해야한다고 들었던 숯불에서 '0'을 빼내려고했지만 오류도 던졌다. atoi는 나에게 Segmentation Fault를 주었고 strol은 컴파일되지 않았고 stoi는 std logic error를 주었다.argv 인수를 int로 변환

#include <iostream> 
#include <string> 
#include <stdlib.h> 

using namespace std; 

bool isPrime(int); 

int main (int argc, char *argv[]) 
    { 
     const int size = 199; 
     int counter = 1; 
     int primeAry[size]; 

    for (int i = 0; i < size; i++) // creates an array of prime numbers 
    { 
     if (isPrime(i)) 
     { 
     primeAry[counter] = i; 
     counter++; 
     } 
    } 
    for (int j = 1; j <= argc; j++) // finds prime numbers by index of args and displays them 
    { 
     if (j == 1) 
     cout << "Last name is " << argv[j] << endl; 
     else 
     { 
     int temp = atoi(argv[j]); 
     cout << temp << " th prime number is " << primeAry[temp] << endl; 
     } 
    } 

    system("pause"); 
    return 0; 
} 

bool isPrime(int num) 
{ 
    if(num <= 1) 
     return false; 
    else if (num <= 3) 
     return true; 
    else if (((num % 2) == 0) || (num % 3) == 0) 
     return false; 

    int i = 5; 
    while((i*i) <= num) 
    { 
     if ((num % i == 0) || ((num % (i + 2)) == 0)) 
     return false; 
     i = i + 6; 
    } 
    return true; 
} 

그리고 여기 얻을 결과 : 여기 내 전체 프로그램은 지금의 같다

Last name is smith 
1 th prime number is 2 
2 th prime number is 3 
3 th prime number is 5 
Segmentation Fault 

영원히이 작업을 봤는데 내가 할 수있는 모든 포럼을 검색 한 찾을 수 있지만 내가 무엇을 놓치고 있는지 알아낼 수 없습니다.

답변

1

분할의 오류 **

당신이 atoiNULL을 통과 할 때 세그먼트 오류를 ​​얻을. 루프 경계가 올바르지 않기 때문에 이러한 현상이 발생합니다. 이 :

for (int j = 1; j <= argc; j++) 

대신 당신이 극단적 인 의심과 <= 종료 조건으로 모든 루프를 처리해야, C에서

for (int j = 1; j < argc; j++) 

해야한다. 버그가 숨어있는 곳이 더 자주 있습니다.

+0

감사합니다. 나는 그것이 엄청나게 단순한 것이라고 생각했다. – MadelineStates