JDS*_*JDS -1 c++ command-line arguments
我已经program.exe
在我的Windows机器上创建了它.由于某种原因,我无法正确传递命令行参数.
int main(int argc, char *argv[]) {
///////testing
cout << "\n\n(int)ARGV[1]: " << (int)argv[1] << "\n\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在终端我运行:
program.exe 4
Run Code Online (Sandbox Code Playgroud)
我看到(int)ARGV[1]: 15333464
打印到我的控制台.
知道为什么会这样或者我如何修改代码?我应该打印出4号.谢谢.
当你转换char*
为int
你时,你得到的指针值bitpattern被解释为一个整数.
相反,解释指向的字符串(作为整数的规范)的一种好方法是std::stoi
从<string>
头部使用.
从而:
#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";
}
Run Code Online (Sandbox Code Playgroud)
对于参数不是整数的有效规范的情况,stoi
将引发异常,并且在上面的代码中将导致程序终止并显示一些消息 - 崩溃.这通常比产生不正确的结果更可取.但是,如果你要处理它,阅读了关于try
与catch
在C++的教科书.
如果您希望文件名作为命令行参数,更常见的是文件系统路径,那么请注意,char
基于字符串编码的Windows约定是Windows ANSI,它具有非常有限的字符集.我的挪威计算机上的某些文件名和路径无法在您的Windows ANSI中表示(是的,Windows ANSI是特定于语言环境的).因此,对于这个C和C++ main
参数机制,是不好的.
Windows API提供了一对wchar_t
基本函数,可用作(工作)替代方法,即GetCommandLine
(检索原始UTF-16编码的命令行)和CommandLineToArgvW
(标准解析以生成单个参数).
某些Windows编译器还提供了标准main
调用的替代方法wmain
,其中argv
声明为wchar_t* argv[]
.这些编译器包括Visual C++和g ++的MinGW64变体.
归档时间: |
|
查看次数: |
735 次 |
最近记录: |