我认为我有意想不到的事情发生在这里。
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。
这里发生了什么?
答案 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类型转换。