2012-10-21 60 views
2

我是C新手,我想問問關於運行C程序並同時提供輸入。如何運行c程序並給出同一行輸入

我想什麼做的是運行一個程序(例如,fileOpener)以及狀態打開

./fileOpener < filename1 

我已經試過它已經哪個文件,它工作正常,但我該怎麼使用知道文件名1是什麼?這樣我可以打開該文件與

fp = fopen(filename1, "r") 

謝謝。

編輯:好的,我會盡量多解釋一下。如果沒有一個「<」,那麼我可以只使用命令行參數,因爲我以前做過,但是當我與<試了一下,沒有工作

具體做法是:fileOpener代碼:

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

int main(int argc, char *argv[]){ 
printf("%s", argv[1]); 
} 

當我使用./fileOpener < filename1輸出./fileOpener

我以前gcc -o fileOpener fileOpener.c,因爲編譯器

+0

你的問題並不清楚。你能發佈完整的代碼嗎? 'filename1'是一個C字符串('char []'/'char *')。 –

回答

2

你不能做到這一點,如果你使用重定向(即「<文件名」),該文件被系統開通。您可能會發現該名稱,但它是不可移植的,並且無論如何因爲文件已經打開而無用。只需使用stdin代替fp,你不需要使用fopen()(也不fclose()):

int main() 
{ 
    char buffer[1024]; 

    // fgets() reads at most 1024 characters unless it hits a newline first 
    // STDIN has been already opened by the system, and assigned to data flowing 
    // in from our file (< inputFile). 
    fgets(buffer, 1024, stdin); 

    printf("The first line of input was: %s", buffer); 
} 

一種不同的方法是使用參數:

int main(int argc, char **argv) 
{ 
    FILE *fp = NULL; 
    char buffer[1024]; 

    if (argc != 2) 
    { 
     fprintf(stderr, "You need to specify one argument, and only one\n"); 
     fprintf(stderr, "Example: %s filename\n", argv[0]); 
     // Except that argv[0], this program's name, counts. 
     // So 1 argument in command line means argc = 2. 
     return -1; 
    } 
    printf("I am %s. You wanted to open %s\n", argv[0], argv[1]); 

    fp = fopen(argv[1], "r"); 

    fgets(buffer, 1024, stdin); 

    printf("The first line of input was: %s", buffer); 

    fclose(fp); fp = NULL; // paranoid check 

    return 0; 
} 
+0

因此,如果文件已經打開,我該如何讀取它? – emanyalpsid

+0

我會編輯我的答案。 – LSerni

+0

是的,這是完美的謝謝。 – emanyalpsid

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

你可以爲它們命名任何你想要的,但這些都是正常的名字。

argc是非負數。它給出了argv中有用元素的數量。

如果ARGC爲正,argv[0]包含程序的名稱。然後argv[1]argv[argc - 1]指向包含程序的命令行參數的字符數組。

例如,如果我運行在命令行的程序,如

unzip filename.zip 

argc將等於2;和argv[0]將等於"unzip";而argv[1]將等於"filename.zip"

Source

0

的程序,在C main函數有兩個參數:

int main(int nArgs, char *pszArgs[]) {} 

第一個參數告訴程序有多少參數傳遞o當你運行它時,你會看到程序。通常,這隻會是1,因爲它包含程序的名稱。

第二個參數是一個字符串表,它可因此被訪問(以下程序打印給它的參數):

int main(int nArgs, char *pszArgs[]) 
{ 
    int i = 0; 
    while (i < nArgs) 
    { 
     printf("param %d: %s\n", i, pszArgs[i]); 
     i++; 
    } 
    return 0; 
} 
相關問題