如果我有这两个命令行参数,是否有一种方法可以使用第二个命令行参数,即包含26个字符的单个单词,将所有字母分开并将它们放入一个新的字符数组中?
./substitution qwertyuiopasdfghjklzxcvbnm
我尝试使用这种语法,但我不确定它是否有效?
char mapping[] = argv[1];
我认为这个语句会创建一个名为mapping的新数组,并将其分配给一个字符串,因为我假设argv[1]
是一个字符串。然后每个索引将根据命令行参数具有相应的字符:
mapping[0] = 'q'
mapping[1] = 'w'
...
任何提示将不胜感激! :)
答案 0 :(得分:2)
你不能为这样的数组赋值。但你可以使用指针。 argv是一个指向空终止字符串的指针数组。这意味着他们有角色' \ 0'最后ASCII值为零。
char *mapping = argv[1];
现在mapping
指向第一个参数。
如果你需要第一个arg的副本,你应该为malloc
(stdlib.h
)函数为字符串分配足够的内存,然后用strcpy
将其复制到那个内存块({{ 1}})。
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.
是mapping
的副本,修改它不会影响argv[1]
。