C++ 中客户端程序的可选命令行参数
optional command line arguments for client program in c++
我必须修改这段需要 2 个命令行参数的代码
if (argc == 3){
host = argv[1];
port = atoi(argv[2]);
else {
fprintf(stderr, "usage error: incorrect number of argumentsn");
以任意顺序具有 3 个可选的命令行参数(用户名、服务器主机编号、服务器端口编号)。我这样写,但它不起作用。有人可以帮我弄清楚该怎么做吗。谢谢
if (argc<1 || argc>4)
fprintf(stderr, "usage error: incorrect number of argumentsn");
else
for(int i=1;i<=argc;i++)
{
if (strcmp( argv[i],"-u"==0 )
username=argv[i];
if(strcmp(argv[i],"-p"==0)
port=atoi(argv[i]);
if (strcmp(avrgv[i],"-h"==0)
host=(argv[i]);
使用getopt
,它是专门为以一致的方式处理命令行参数而构建的,这是众所周知的难以正确完成的事情。
您应该增加索引以获取绕过选项的参数的值。 例如,像这样修改您的代码。
if (argc<1 || argc>4)
fprintf(stderr, "usage: %s -u usernamen", argv[0]);
else
for(int i=1;i<=argc;i += 2)
{
if (strcmp( argv[i],"-u")==0 )
username=argv[i + 1];
此外,您最好将username
定义为char
数组并将参数值复制到其中,以便您可以直接修改它,如下所示:
char username[NAME_LEN + 1]; // +1 for tailing ' '
strncpy(username, argv[i + 1], NAME_LEN);
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 需要有关如何设置getopt_long以正确传递命令行参数的建议
- Bash 脚本和命令行参数