我如何阅读argv[0]
?我正在使用NetBeans。每次,我都要输入标准输入。当我使用argv
时,程序会在没有输入的情况下执行。
这是我的代码:
int main(int argc,char *argv[])
{
char *text;
int textLen,repNum;
text = stream2string(stdin,&textLen);
//....text = argv[0] doesnt work :(
更新
当我编译并运行时,我必须键入一个示例字符串!字符串始终相同: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
也很重要。
答案 0 :(得分: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);
等。 (当然,您可以而且应该提供更详细和有用的错误消息等,但我正在努力关注您似乎缺少的关键点。)
编辑:好吧,从评论来看,焦点似乎已经过时了,所以我只是编辑了 提供最低限度的可接受错误消息。
答案 1 :(得分:2)
尝试使用argv [1]来读取第一个参数。 argv [0]返回被调用的可执行文件的名称(或Unix / Linux系统上可执行文件的链接名称)。
答案 2 :(得分:0)
这听起来好像你没有在IDE中运行它时设置程序参数。这是一个NetBeans问题 - 与C无关。