2009-08-03 56 views
0

我如何從argv[0]讀取?我正在使用NetBeans。每次,我都必須輸入stdin。當我使用argv時,程序會在沒有我輸入的情況下執行。閱讀來自argv [0]

這裏是我的代碼:

int main(int argc,char *argv[]) 
{ 
    char *text; 
    int textLen,repNum; 

    text = stream2string(stdin,&textLen); 
    //....text = argv[0] doesnt work :(

UPDATE:

當我編譯和運行,我必須鍵入的示例串!字符串總是相同的:ABAABAABBBA。所以我會採用第一個參數而不是stdin。但argv[1]也不起作用。

這裏的stream2string()

char *stream2string (FILE *fptr, int *n) 
{ 
    static char *s; 

    *n = 0; 
    ALLOC(s,char,2); 
    s[*n] = getc(fptr); 

    while(s[*n]!=EOF && s[*n]!='\0' && s[*n]!='\n') { 
    REALLOC(s,char,++*n+2); 
    s[*n] = getc(fptr); 
    } 
    s[*n] = '\0'; 
    return(s); 
} /* stream2string() */ 

我認爲設置textLen也很重要。

+1

目前尚不清楚你的問題是什麼或者你正在努力完成什麼,你能否用一個完整的示例程序來闡明這個問題? – 2009-08-03 16:40:17

+1

當你有一個論點時,argc的價值是什麼? argv [0]應該包含可執行文件的名稱;你的第一個論據應該是在argv [1]中。 – Zed 2009-08-03 16:41:42

回答

7

argv [0]是您的可執行文件的名稱;我不認爲你想從中讀取!相反,我覺得你要打開的argv [1](作爲第一個參數傳遞給你的程序在命令行的文件名)和閱讀

int main(int argc,char *argv[]) 
{ 
    char *text; 
    int textLen,repNum; 
    FILE *theinput; 

    if (argc < 2) { 
    /* no argument */ 
    /* give error message and exit */ 
    fprintf(stderr, "Must pass an argument!\n"); 
    exit(1); 
    } 

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

    if (!theinput) { 
    /* Argument is non-existing file */ 
    /* give error message and exit */ 
    fprintf(stderr, "Can't read %s\n", argv[1]); 
    exit(1); 
    } 

    text = stream2string(theinput, &textLen); 

    fclose(theinput); 

等(當然,你可以和應該提供更詳細和有用的錯誤消息等,但我試圖專注於你似乎缺少的關鍵點)。

編輯:不錯啊,重點似乎不興,從評論來看,所以我只是編輯 提供最低限度可接受的錯誤消息。

2

嘗試使用argv [1]來讀取第一個參數。 argv [0]返回被調用的可執行文件的名稱(或在Unix/Linux系統上指向可執行文件的鏈接的名稱)。

0

這聽起來像你沒有設置它在IDE中運行時的程序參數。這是一個NetBeans問題 - 與C.無關。