C++ 从 char* argv[] 读取输入

标签 c++ arrays

我刚刚学习 C++,正在尝试编写一个程序,该程序将从 char* argv[] 获取输入并处理它们。

每个 argv[] 都是 6 个十六进制数,例如1A2B3C

我有一个 char 数组 - 字符消息[3]

我正在尝试将 1A 放入 message[0],将 2B 放入 message[1]3Cmessage[2]

我知道 argv 有点像二维数组,所以如果我的命令行是:

./test 2 1A2B3C 4D5E6F

argv[2][0] 会给我“1”,argv[2][1] 会给我“A”

但我不知道如何将2个char一起读入char数组。

谁能指出我正确的方向?

最佳答案

如果主函数是这样声明的

int main(int argc, char *argv[])

打电话

./测试 1A2B3C 4D5E6F

将产生一个看起来类似于

的argv数组

enter image description here

在参数中

  • 第一个条目总是路径和可执行文件名,例如"/home/user/test"(为简单起见,图片只显示test)
  • 其余条目是命令行参数(在本例中为“1A2B3C”和“4D5E6F”)。
  • argv 中的每个条目依次是一个字符数组

举个例子

  • argv[1] = ['1','A','2','B','3','C','\0']

从参数中提取子字符串

  • 将每个参数转换为字符串 (std::string s(argv[1]) 使用字符串比使用 char* 更容易
  • 提取子串(s.substr(0,2))
  • 将每个子字符串转换为整数(strtol(substring,NULL,16))

试试这个示例代码

#include <iostream>
#include <stdlib.h> //required for string to int conversion

int main(int argc, char *argv[]) {

  std::cout << "executable= " << argv[0] << std::endl;

  for (int i=1; i<argc; i++) {
    std::string s(argv[i]); //put char array into a string

    std::cout << "arg["<<i<<"]="<<s<<std::endl;

    for (int j=0; j<6; j+=2) {

      std::string byteString = s.substr(j, 2);

      char byte = (char) strtol(byteString.c_str(), NULL, 16);

      std::cout << "byteString= "<<byteString << " as integer= "<<(int)byte<<std::endl;
    }
  }
}

调用“./test 1A2B3C 4D5E6F”输出

executable= /home/user/test
arg[1]=1A2B3C
byteString= 1A as integer= 26
byteString= 2B as integer= 43
byteString= 3C as integer= 60
arg[2]=4D5E6F
byteString= 4D as integer= 77
byteString= 5E as integer= 94
byteString= 6F as integer= 111

或者,如果命令行参数已经可以拆分,即

"./test 1A 2B 3C 4D 5E 6F"

可以避免子串提取。

关于C++ 从 char* argv[] 读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472161/

相关文章:

c++ - 使用指针交换字符变量

arrays - Mongoose 从 findByIdAndUpdate 中删除数组(继承模式)

javascript - 定制 ES6 数组过滤的结果

c++ - map 数据结构不显示 main.cpp 中保存的条目

c++ - 嵌套类的部分特化

C++/Xcode 套接字绑定(bind)()错误

c++ - 不能在 C++ 中使用宏

php - 数组按值划分/拆分

C 和函数中的指针 - 更改不保存

javascript - 如何通过 Lodash 将对象数组转换为一个对象