今天写了一段c++代码,功能是通过命令行传参计算2个参数的和,
在进行参数类型转换的时候,报下以错误:
025.cpp:9:14: error: cast from pointer to smaller type 'int' loses information
sum += (int)argv[i]
刚开始我没想去查在c++中进行字符类型转换的方法,而是想判断一下argv[1]是什么类型。
于是加了下面一行代码:
for (int i=1; i<3; ++i){
//cout << argv[i]<<endl;
cout << typeid(argv[i]).name() <<endl;
}
输出的结果是:PKc
typeid(argv)的结果是PPKc
注:要想使用typeid,必须加上#include <typeinfo>
这是什么东西?于是开始百度,但没搜到,在知乎上看到这样的解释:
名字是编译器规定的。具体到这个上面你可以记成pointer(P) const(K) char(c)
原来main函数传递的argv的类型是 const char *, 是一个字符指针常量.
对了,知科那哥们说是编译器规定,我是在mac下运行的程序,gcc的版本是4.2.1,还没在windows下测试过。
上面代码中对argv的类型转换也是错误的。
正确的程序如下:
#include <iostream>
#include <typeinfo>
using namespace std;
int main(int argc, const char *argv[]){
int sum = 0;
cout<<typeid(argv).name()<<endl;
if(argc>2){
for (int i=1; i<3; ++i){
int item = stoi(argv[i]);
sum += item;
}
}
//cout << argc <<endl;
cout << sum <<endl;
return 0;
}