1

我该如何阅读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. 所以我将采用第一个参数而不是标准输入。但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也很重要。

4

3 回答 3

8

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);

等等(当然,您可以而且应该提供更详细和有用的错误消息等,但我试图关注您似乎遗漏的关键点)。

编辑:嗯,从评论来看,焦点似乎过时了,所以我只是编辑以提供最低限度的可接受的错误消息。

于 2009-08-03T16:41:56.180 回答
2

尝试使用 argv[1] 来读取第一个参数。argv[0] 返回被调用的可执行文件的名称(或 Unix/Linux 系统上可执行文件的链接名称)。

于 2009-08-03T16:40:20.973 回答
0

这听起来像您没有设置程序在 IDE 中运行时的参数。这是一个 NetBeans 问题 - 与 C 无关。

于 2009-08-03T16:41:15.883 回答