将argv参数转换为int

时间:2016-09-18 22:10:20

标签: c++ segmentation-fault argv atoi

我尝试过atoi,strol和stoi,但他们都没有为我工作。我甚至试图减去0' 0' 0从我听到的char应该工作,但也犯了错误。 atoi给了我一个Segmentation Fault,strol不会编译,stoi给了我一个std逻辑错误。这是我现在的整个计划:

template <class T>
class C
{
public:
    C ()
    {
        mem_C = T();
    }
    C (C<T>&& rhs)
    {
        mem_C = std::move(rhs.mem_C);
        rhs.mem_C = T();          // ?? like this?
    }

private:
    T mem_C;
};

以下是我得到的结果:

#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;
}

我一直在努力解决这个问题,而且我已经搜索过每一个我能找到的论坛,但我无法弄清楚我错过了什么。

1 个答案:

答案 0 :(得分:1)

  

分段错误**

atoi传递给for (int j = 1; j <= argc; j++) 时会出现细分错误。发生这种情况是因为您的循环边界不正确。这样:

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

应该是

<=

在C中,您应该使用if (! data.pi.description) ... 终止条件处理所有循环,并且极度怀疑。通常情况下,这就是bug隐藏的地方。