*argv[]的取消引用值不准确

dereferenced value of *argv[] not accurate

本文关键字:引用 不准确 取消 argv      更新时间:2023-10-16

我正试图制作一个程序,找到给定值的最大素数。

如果我运行./a.out 55cout << "Input " << *argv[1]<< endl;将返回5而不是55。

当我取出星号并检查指针的值(argv[1])时,我得到55。我很困惑为什么会发生这种事。

int main(int argc, char *argv[])
{
    if(argc == 2)
    {
        cout << "Input  " << *argv[1]<< endl;
        // cout << "Biggest Prime Factor of 34 is : " << findPrime(number, 0) << endl;
    }
    else
        cout << "Too many inputs:" << endl;
    return 0;
}

删除*:

cout << "Input  " << argv[1] << endl;
                    ^ 

因为*argv[1]意味着argv[1]的第一个字符。您需要整个字符串。

很简单:

  • argv[1]是包含第一个参数的C字符串
  • *argv[1]是该字符串的第一个字符

如果后者令人困惑,请注意*argv[1]等同于argv[1][0]

总之,你想要:

cout << "Input  " << argv[1]<< endl;

argv是指向字符数组的指针。

然后你做例如argv[0],你会得到一个字符表,例如一些文本。

因此,如果您想在argv[0]下隐藏文本,则不需要在argv[0]之前放置星号。