2013-12-09 231 views
0

這是一個非常基本的問題,但我無法在任何地方找到明確的答案。 我理解的主要參數,只要它們指的是什麼:C - main()命令行參數

int main(int argc, char *argv[]) 

這裏的argc指的命令行參數和argv數是指包含每個字符串數組。我從.c文件創建了源代碼的exe文件,但沒有使用命令提示符的經驗,也不理解命令行參數的語法。

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


int main(int argc, char *argv[]) 
{ 
    FILE *infile, *outfile; 
    int iochar; 

    if(argc != 3){ 
     printf("Usage: filename infile outfile\n"); 
     exit(1); 
    } 

    if((infile = fopen(argv[1], "r")) == NULL){ 
     printf("Can't open input file.\n"); 
     exit(1); 
    } 

    if((outfile = fopen(argv[2], "w")) == NULL){ 
     printf("Can't open output file.\n"); 
     exit(1); 
    } 

    while((iochar = getc(infile))!=EOF){ 
     putc(iochar, outfile); 
    } 

    fclose(infile); 
    fclose(outfile); 

    printf("You've reached the end of the program.\n"); 

    return; 
} 

上述代碼應該帶3個參數並將第2個參數的內容複製到第3個參數的位置。我該怎麼做才能發生?

+0

您似乎在這裏提出兩個問題,它們似乎沒有關係。第一個 - 「這些論據都存儲在哪裏」 - 沒有任何意義。它們作爲函數'main()'的參數提供。 –

+0

爲了理解這裏發生了什麼,首先在'if(argc!= 3)'行設置一個斷點,然後檢查'argc'和'argv'的內容。 –

+0

@sudowned我想一個更好的措辭它是我如何提供參數的命令提示符?我似乎無法達到命令提示符接受任何輸入的地步。 – Aleyha

回答

1

您可以在VS項目的Debug屬性中設置命令行參數。

不理解命令行參數的語法。

命令行參數的語法細節取決於什麼程序正在解釋它們...... VS,Windows快捷方式,Windows cmd,bash等......但通常它只是一個項目列表用空格分隔。如果項目本身包含空格,引號或其他特殊字符,那麼您需要注意您使用的解釋器的規則。

命令行參數的語義是由程序定義的...在這種情況下,第一個參數是輸入文件的名稱,第二個參數是輸出文件的名稱。

printf("Usage: filename infile outfile\n"); 

這不是一個很好的用法消息......在「文件名」應該是你的程序,這是一般的argv的值的名稱[0]。因此:

printf("Usage: %s infile outfile\n", argv[0]); 
+0

從技術上講,第一個參數是程序的位置之後的短語?或者該程序的位置被認爲是第一個參數? – Aleyha

+0

@Aleyha前者。第一個參數是infile,第二個參數是outfile。雖然程序路徑在argv(argv [0])中,但它不被視爲或稱爲參數。 –

+0

但程序路徑仍然算argc正確嗎? – Aleyha