C++ C++;.exe程序的命令行参数

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打印到我的控

我的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
打印到我的控制台


为什么会发生这种情况,以及如何修改代码?我应该把数字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;
}