将字符数组的元素转换为整数,并使用cout进行打印

时间:2014-05-04 05:47:08

标签: c++

我认为我有意想不到的事情发生在这里。

int main(int argc, char* argv[]) {
    cout << "argv[1] : " << argv[1] << endl;
    cout << "(int)argv[1] : " << (int)argv[1] << endl;
}

当我这样称呼时:

$ ./a.out 1

输出结果为:

argv[1] : 1
(int)argv[1] : -1074470344

我希望

argv[1] : 1
(int)argv[1] : 49

由于'1'的ASCII码是49。

这里发生了什么?

3 个答案:

答案 0 :(得分:1)

argv[1]不是char,而是char *

(int)argv[1][0]可能是你想要的,如果你保证参数只有一个字符。

cout << "(int)argv[1][0] : " << (int)argv[1][0] << endl;

你会得到:

argv[1] : 1
(int)argv[1][0] : 49

<强>注意

如果您的参数是一个类似“11”的字符串,您将得到一个奇怪的结果,例如:

argv[1] : 11
(int)argv[1][0] : 49

答案 1 :(得分:1)

请注意,argv的类型为char* argv[],因此argv[1]不是单个char,而是C风格的字符串。

要打印第一个字符,请使用argv[1][0]

std::cout << "(int)argv[1][0] : " << (int)argv[1][0] << std::endl;

答案 2 :(得分:0)

  

cout&lt;&lt; &#34;(int)argv [1]:&#34; &LT;&LT; (int)argv [1]&lt;&lt; ENDL;

您正在尝试转换argv [1],这是一个字符指针,即&#34; C string&#34;。它还可以包含&#34; 11&#34;,而不仅仅是&#39; 1&#39;。

你需要&#34;演员&#34;第一个字母,但我认为这不是一个好主意。

此外,您还没有检查argc是否确实在命令行上提供了参数。这是另一个错误,除非你能确定它永远不会被滥用&#34;。

另一个错误是没有返回整数,例如零,在函数结束时应该,否则你将收到编译器的警告。

你可以这样写:

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    if (argc == 1)
        return 1;
    cout << "argv[1] : " << argv[1] << endl;
    cout << "(int)argv[1][0] : " << (int)argv[1][0] << endl;
                         ^^^                    ^^^
    return 0;
}

话虽如此,您可能希望在C ++程序中使用static_cast而不是低级C类型转换。