2012-03-01 32 views
1

我正在尝试制作一个程序,该程序可以查找给定值的最大素数因子。* argv []的取消引用值不准确

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

当我拿出asterik并检查指针'值(的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; 
} 

回答

2

*

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

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

+0

我有些困惑。不是argv是一个char指针数组,而不是字符数组? – wayfare 2012-03-01 18:55:31

+0

@wayfare是的,但'argv [1]'本身就是'char *'。因此,'* argv [1]'是一个普通的'char'。 – cnicutar 2012-03-01 18:56:34

+0

所以不应该argv [1]返回的地址不是实际的字符? – wayfare 2012-03-01 19:01:29

2

很简单:

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

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

总之,你想:

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

的argv是指向字符数组。

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

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