将参数从命令行传递到C中的malloc数组

将参数从命令行传递到C中的malloc数组,c,C,我试图将传递给程序的第二个命令行参数复制到另一个字符串中。我的目标是像这样运行程序: ./a.out param1 word param3 param4 并获得一份word的副本。怎么做?第一个参数通常是可执行文件的名称。所以在命令行中传递的第二个元素的索引是2。以下是您如何做您正在尝试做的事情: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, ch

我试图将传递给程序的第二个命令行参数复制到另一个字符串中。我的目标是像这样运行程序:

./a.out param1 word param3 param4

并获得一份word的副本。怎么做?

第一个参数通常是可执行文件的名称。所以在命令行中传递的第二个元素的索引是2。以下是您如何做您正在尝试做的事情:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]) {
  if (argc < 3) {
    puts("Too few arguments");
    return EXIT_FAILURE;
  }

  char* second_arg = strdup(argv[2]);
  printf("Second argument is %s\n", second_arg);
  free(second_arg);
}

但大多数情况下,我们需要的是有弹性的字符串,而不是固定的最大字符串,因此,首选
strdup

第一个参数通常是可执行文件的名称。所以在命令行中传递的第二个元素的索引是2。以下是您如何做您正在尝试做的事情:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]) {
  if (argc < 3) {
    puts("Too few arguments");
    return EXIT_FAILURE;
  }

  char* second_arg = strdup(argv[2]);
  printf("Second argument is %s\n", second_arg);
  free(second_arg);
}


但大多数情况下,我们需要的是有弹性的字符串,而不是固定的最大字符串,因此更喜欢
strdup

sizeof(char)
始终为1。这不是复制字符串的方式。您使用strcpy
strcpy
。这是否回答了您的问题@我试着使用strdup和strcpy。valgrind指向您的
argc
aguments,这意味着您应该访问
argv[argc-1]
sizeof(char)
始终为1。这不是复制字符串的方式。您使用strcpy
strcpy
。这是否回答了您的问题@我试着使用strdup和strcpy。两者都给了我分段错误,valgrind指向那条线你有
argc
aguments,这意味着你应该访问
argv[argc-1]
。谢谢,但在while循环中我提到了“while(argc==2)”,这意味着我没有访问最后一个元素,对吗?@technextgen如果一个数组有2个元素,有效的指数是0和1。如果我对OP的问题有一点肯定,我会考虑编辑清楚,然后重新打开。@约书亚我重申了这个问题。看看是否值得重新打开。@AyxanHaqverdili Enjoy谢谢,但在while循环中我提到了“while(argc==2)”这意味着我没有访问最后一个元素,对吗?@technextgen如果数组有2个元素,有效的索引是0和1。哦,好吧。如果我对OP的问题有一点肯定,我会考虑编辑清楚,然后重新打开。@约书亚我重申了这个问题。看看是否值得重新打开。@AyxanHaqverdili祝您愉快