将argv参数转换为int

Converting argv arguments to int

本文关键字:int 转换 参数 argv      更新时间:2023-10-16

我试过atoi, stroll和stoi,但它们都不适合我。我甚至试图从我听说应该工作的char中减去'0',但这也抛出了一个错误。atoi给了我一个分段错误,strol不能编译,stoi给了我一个std逻辑错误。以下是我到目前为止的全部程序:

#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

我一直在这个工作,我已经搜索了每一个论坛,我能找到,但我不能弄清楚我错过了什么。

分段错误* *

当将NULL传递给atoi时,会出现分段错误。这是因为你的循环边界不正确。:

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

应该改成

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

在C语言中,对于所有具有<=终止条件的循环,应持极端怀疑态度。