2011-02-18 112 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; 
} 
相關問題