2009-08-03 70 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.无关。