2011-02-18 77 views
7

我有一个关于通过命令行传递参数的问题。如何从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'比较

+0

好感谢大家对我我的愚蠢道歉我一直得到分段错误,但我看到为什么现在。 – mike 2011-02-18 20:21:58

+1

C是一个残忍的主人! – 2011-02-18 20:27:42

回答

12

您可以打印参数而不将它们传输到字符数组中。它们是空终止的C字符串和printf吃他们的早餐:

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

好吧,我不想立即打印参数,我需要将传递的值存储在一个变量中,我想稍后打印一个函数 – mike 2011-02-18 20:17:01

2
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]是 “你好”

0

可以输出你与

printf("%s", init_d); 

与init_d指向字符串 “%s的” 输出的所有字符字符串,直到达到'\ 0'。在C中,字符串以null结尾。

2

运行

init_d = *(argv++); 

(括号不是必要的,顺便说一句)后,init_d是指向一个字符。在C中,一个字符串是一个符合契约的字符指针,如果进度足够远,最终会到达一个空字符('\ 0'),表示字符串结束。换句话说,init_d现在正是你想要的字符串。你可以用

printf("%s", init_d); 

注意,顺便说一句,那*的argv ++是给你的argv的第一要素,这实际上是在命令行中的函数的名称打印。您可能需要第一个命令行参数,您将使用* ++ argv获取该参数。

1

argv是一个指向空终止字符串数组的指针。你不需要知道字符串的大小;所有你需要做的是指向这个值,因为字符串的末尾用'\ 0'表示。

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

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

3

这里的例子,命令行参数转换为一个字符串:

#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; 
} 
相关问题