如何从C中的命令行参数中读取“string”?

时间:2011-02-18 20:10:49

标签: c

我有一个关于通过命令行传递参数的问题。

我的main()看起来像

int main(int argc, char **argv){
  int b, d, n, flag;  
  char *init_d, tst_dir[100];

  argv++;
  init_d=*(argv++);
  //printf(); <--------What do I have to do to init_d so that I can print it later?

如果argv是一个指针数组的指针,我指的是init_d指向指针argv所指向的值? (如果这甚至有意义的话)

我假设我必须将该值输入字符数组才能将其打印出来,但如果我不知道我传入的“字符串”的大小,我不知道如何实现这一点。 例如,如果我运行我的代码'./myprogram hello'与'./myprogram alongerinput'进行比较

6 个答案:

答案 0 :(得分:14)

您可以打印参数而不将它们转换为字符数组。它们是以null结尾的C字符串,printf在早餐时吃它们:

for (i=0; i<argc; i++)
  printf("%s\n", argv[i]);  

答案 1 :(得分:4)

argv是一个指向以null结尾的字符串数组的指针。您不需要知道字符串的大小;所有你需要做的就是指向值,因为字符串的结尾用'\ 0'表示。

char* init_d = argv[0];
printf("%s", init_d);

如果您确实想知道字符串的长度,可以使用strlen(argv[0])

答案 2 :(得分:4)

以下是将命令行参数转换为单个字符串的示例:

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

int main(int argc, char *argv[]) {
    if (argc < 1)
        return 0;

    int i;
    int strsize = 0;
    for (i=1; i<argc; i++) {
        strsize += strlen(argv[i]);
        if (argc > i+1)
            strsize++;
    }

    printf("strsize: %d\n", strsize);

    char *cmdstring;
    cmdstring = malloc(strsize);
    cmdstring[0] = '\0';

    for (i=1; i<argc; i++) {
        strcat(cmdstring, argv[i]);
        if (argc > i+1)
            strcat(cmdstring, " ");
    }

    printf("cmdstring: %s\n", cmdstring);

    return 0;
}

答案 3 :(得分:3)

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

    while(--argc>0)
       printf("%s\n",*++argv);
    return 0;
}

argc: argument count i.e. number of arguments in command line
argv: argument vector 

如果你的程序是myProg,那么命令行中的myProg hello有argc = 2(包括程序名),argv [0]是“myProg”,而argv [1]是“你好”< / p>

答案 4 :(得分:2)

运行后

init_d = *(argv++);

(parens不是必需的,顺便说一下),init_d是指向一个字符的指针。在C中,字符串是一个符合契约的字符指针,如果它进展得足够远,最终会到达一个空字符('\ 0'),表示字符串的结尾。换句话说,init_d现在正是您想要的字符串。您可以使用

进行打印
printf("%s", init_d);

注意,顺便说一句,* argv ++为您提供了argv的第一个元素,它实际上是命令行中函数的名称。您可能需要第一个命令行参数,您将使用* ++ argv。

答案 5 :(得分:0)

您可以使用

输出使用init_d指向的字符串
printf("%s", init_d);

“%s”输出字符串的所有字符,直到达到'\ 0'。在C中,字符串以空值终止。