C++ C++;.exe程序的命令行参数
我的Windows计算机上正在创建C++ C++;.exe程序的命令行参数,c++,command-line,arguments,C++,Command Line,Arguments,我的Windows计算机上正在创建program.exe。由于某些原因,我无法正确地传入命令行参数 int main(int argc, char *argv[]) { ///////testing cout << "\n\n(int)ARGV[1]: " << (int)argv[1] << "\n\n"; return 0; } 我看到(int)ARGV[1]:15333464打印到我的控
program.exe
。由于某些原因,我无法正确地传入命令行参数
int main(int argc, char *argv[]) {
///////testing
cout << "\n\n(int)ARGV[1]: " << (int)argv[1] << "\n\n";
return 0;
}
我看到(int)ARGV[1]:15333464
打印到我的控制台
为什么会发生这种情况,以及如何修改代码?我应该把数字4打印出来。从
char*
转换到int
时,指针值位模式被解释为整数
相反,将指向的字符串解释为整数规范的一个好方法是使用
标题中的std::stoi
因此:
#包括
#包括//EXIT\u故障
#包括//标准::stoi
使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=2)
{
返回退出失败;
}
cout此处argv[1]
是字符指针(char*
),因此无法通过类型转换将字符指针转换为整数。因此,要将字符指针转换为整数,请使用c标准库(包括cstdlib
库)中提供的atoi()
函数
为什么立即投反对票?这对我来说不是非常清楚,我也找不到确切的问题。你不能简单地从char*
指针到int
。你能告诉我如何正确地获得int
?我对C/C++非常生疏。argv[1]
是一个指针,它被c样式转换为int
。您必须使用atoi(argv[1])
如果参数是“00”或“-0”该怎么办?−1尽管返回1
在大多数系统上都有效,但该标准并未对其进行定义,并向新手读者传授了一种不好的做法。此外,在使用
标题时,atoi
需要符合标准::atoi
(或者使用时使用)可移植性。此外,argc>=2
标准意味着程序会自动忽略其他参数,这是不正确的,因此也不是拒绝投票的原因。
program.exe 4
#include <iostream>
#include <stdlib.h> // EXIT_FAILURE
#include <string> // std::stoi
using namespace std;
int main(int argc, char *argv[])
{
if( argc != 2 )
{
return EXIT_FAILURE;
}
cout << "ARGV[1]: " << stoi( argv[1] ) << "\n";
}
#include <iostream>
#include <cstdlib>
using std::cout;
using std::endl;
using std::atoi;
int main(int argc, char *argv[])
{
cout << atoi(argv[1]) << " " << endl;
return 0;
}
#include <iostream>
#include <cstdlib>
#include <cstring>
using std::atoi;
using std::cout;
using std::endl;
using std::strcmp;
int main(int argc, char *argv[])
{
if(argc == 2)
{
if(atoi(argv[1]) == 0 && strcmp(argv[1], "0") != 0)
cout << "The argument supplied is not an integer" << endl;
else
cout << atoi(argv[1]) << " " << endl;
}
else if( argc > 2)
cout << "Too many arguements" << endl;
else
cout << "Insufficient arguements" << endl;
return 0;
}