gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:22:06 25 4
gpt4 key购买 nike

我刚刚学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com