【问题标题】:C - Store Command Line Argument as an Array of CharC - 将命令行参数存储为 Char 数组
【发布时间】:2017-12-21 01:45:01
【问题描述】:

如果我有这两个命令行参数,有没有办法可以将第二个命令行参数(包含 26 个字符的单个单词)分开,然后将它们放入一个新的字符数组中?

./substitution qwertyuiopasdfghjklzxcvbnm

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

char mapping[] = argv[1];

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

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

任何提示将不胜感激! :)

【问题讨论】:

  • 这没有多大意义,C中的string存储在char数组中(argv[1]is 一个 char 数组).
  • char mapping[strlen(argv[1])+1]; strcpy(mapping, argv[1]);
  • 是的,但它不是字符串。
  • @M.Ng '\0' 终止一个字符串。没有它,数组的内容不符合字符串的条件,但你当然可以这样做。
  • @FelixPalmen-- 字符串当然是(以空结尾的)字符数组,但 argv[1] 不是数组,而是指向数组第一个元素的指针。

标签: c arrays command-line-arguments


【解决方案1】:

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

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]

【讨论】:

猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2023-03-21
相关资源
最近更新 更多