2016-09-18 52 views
0

私はatoi、strol、およびstoiを試しましたが、どれも私のために働いていません。私は私が聞いたチャーから '0'を引いてみることさえしようとしましたが、それはあまりにもエラーを投げた。 atoiは私にSegmentation Faultを与えます、ストロークはコンパイルされず、stoiは私にstd論理エラーを与えます。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

関連する問題