C - 将命令行参数存储为 Char 数组

标签 c arrays command-line-arguments

如果我有这两个命令行参数,有没有一种方法可以让第二个命令行参数(一个包含 26 个字符的单词)分隔所有字母并将它们放入一个新的字符数组中?

./substitution qwertyuiopasdfghjklzxcvbnm

我试过使用这种语法,但我不确定它是否有效?

char mapping[] = argv[1];

我认为该语句会创建一个新的字符数组,称为映射,并将其分配给一个字符串,因为我假设 argv[1] 是一个字符串。然后每个索引将根据命令行参数具有相应的字符:

mapping[0] = 'q'
mapping[1] = 'w'
...

如有任何提示,我们将不胜感激! :)

最佳答案

你不能给这样的数组赋值。但是您可以使用指针。 argv 是指向空终止字符串的指针数组。这意味着它们在末尾具有 ASCII 值为零的字符“\0”。

char *mapping = argv[1];

现在 mapping 指向第一个参数。 如果您需要第一个 arg 的副本,您应该使用 malloc(stdlib.h) 函数为字符串分配足够的内存,然后将其复制到该内存块strcpy(string.h).

char *mapping = malloc(strlen(argv[1]) + 1); //strlen returns the size of the string not including the null character at the end.
strcpy(mapping,argv[1]);
...
free(mapping);//then you will have to free the allocated space when you are done with it.

现在 mappingargv[1] 的副本,修改它不会影响 argc[1]

关于C - 将命令行参数存储为 Char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45128685/

相关文章:

c - 修改原始数据类型 Arduino

更改节点 libxml2 的命名空间

c - 从模数和指数加载 rsa key ,加密字符串,然后进行核心转储

java - method.invoke 上的参数数量错误

C++捕获命令行逐行输入和输出

java - 如何根据Java中的命令行参数使 "if"条件自动改变?

c - 打开外部程序

javascript - 如何在页面加载或刷新时打印或回显随机 php 字符串?

javascript - 数组不会通过ajax传递

bash - Bash 中的 "$@"和 "$*"有什么区别?