【问题标题】:How to initialise a char array with command line argument in C如何在 C 中使用命令行参数初始化 char 数组
【发布时间】:2014-02-02 00:28:06
【问题描述】:

我刚开始学习 C,我有一个基本问题。如何读出命令行参数。例如,如果我执行:

       ./main "test"

如何将命令行参数“test”放入变量中:

         int main(int argc, char **argv){
             char s[] is supposed to equal "test"
         }

编辑:基本上我想创建一个等于 argv[1] 的新 char 数组。

【问题讨论】:

  • 输入strdup() (POSIX)。或char arr[strlen(argv[1]) + 1];strcpy(arr, argv[1])...

标签: c


【解决方案1】:
char * s = argv[1];//to read the test
if(strcmp(s,"test") == 0){
    //the command line argument is equal to the string test
 }

【讨论】:

  • 如果没有给出参数,你的程序会崩溃
  • 我没有写完整的程序..我只是解释如何完成任务。
  • @thumbmunkeys 无关紧要。 OP 正在寻找有 is 参数的情况。不需要这种挑剔的。虽然我们在这里:您声明“argv[0] 是程序的名称(main),argv[1] 是第一个参数” - 这并非普遍正确,它取决于实现。
【解决方案2】:

主函数的参数argcargv 用于访问程序启动时传递给程序的字符串参数。 argc 是传递的参数数量。例如,当像这样运行时 - ./myprogram arg1 arg2 arg3argc 的值为 4。这是因为用户传递的字符串与程序名称一起传递。即argv[0] 指向字符串myprogramargv[1] 指向arg1 等。要获取第n 个参数,您必须访问argv[n + 1]
知道这一点,要复制第一个参数,您可以执行以下操作

char * s = malloc(strlen(argv[1]) + 1);
strcpy(s, argv[1]);

但是,我建议在复制之前确保您想要的参数不指向 NULL。这就是 argc 派上用场的地方。在访问argv[1] 之前,我会检查argc >= 2

这里有更好的解释http://crasseux.com/books/ctutorial/argc-and-argv.html 或这里http://www.cprogramming.com/tutorial/c/lesson14.html

编辑: 请记住释放您通过free分配的所有内存
例如。 free(s).

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2013-09-28
    • 2021-02-04
    • 2012-07-27
    • 2018-11-15
    • 2023-03-17
    相关资源
    最近更新 更多