【问题标题】:Copy command line arg to a variable C将命令行 arg 复制到变量 C
【发布时间】:2013-09-28 10:03:54
【问题描述】:

如何将命令行 arg 复制到 c 中的变量?如果要执行以下操作。

myprog "Hello, world!"

我想将参数的值存储在char 变量中。不知道我的方向是否正确。

假设总是只传入 1 个参数。

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

  int len;
  len=strlen(argv[1]);
  char *array;

  array= malloc((len +1) * sizeof(char));
  int i;
  for(i=0;i<=len;i++){

    // This does not work... am a little lost
    array[i]=*(argv+1)[i];

  }
...
}

谁能指出我正确的方向。

【问题讨论】:

  • 简单的方法是char* saved_arg = strdup(argv[1]);。帮自己一个忙,学习基本的标准库函数。
  • 顺便说一句,你可能想写argv[1][i](*(argv+1))[i]
  • 不要假设你会被传递一个参数;在使用它之前检查您是否(至少)传递了一个参数。

标签: c variables command-line-arguments


【解决方案1】:

如果您不打算操作参数,您可以复制指针,如下所示:

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

    array = argv[1];

    ...
}

否则,您可以像这样复制字符串:

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

    array = strdup(argv[1]);
}

【讨论】:

  • 只是一个疑问,为什么我们没有在这里使用 strcpy 而不是 strdup?输出会有所不同吗?谢谢!
【解决方案2】:

看起来像是运算符优先级问题。当您想要的是(*(argv+1))[i] 时,代码*(argv+1)[i] 被评估为*((argv+1)[i])。你最好只使用argv[i][0]

评估为*((argv+1)[i]) 等效于*(*((argv+1)+i)),即*(*(argv+1+i)),即*(argv[i+1]),它试图从len+1 中挑选出参数#1 的第一个字符。

一般来说,如果您使用下标而不是指针算术,您的代码会更清晰。不必要的指针算术最好留给求职面试中的难题。

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2012-09-04
    • 2013-05-18
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多