C 从argv读取[0]

C 从argv读取[0],c,argv,C,Argv,如何读取argv[0]?我正在使用NetBeans。每次我都要输入标准输入。当我使用argv时,程序在没有输入的情况下执行 这是我的密码: int main(int argc,char *argv[]) { char *text; int textLen,repNum; text = stream2string(stdin,&textLen); //....text = argv[0] doesnt work :( 更新: 当我编译和运行时,我必须键入一个示例字符串!

如何读取
argv[0]
?我正在使用NetBeans。每次我都要输入标准输入。当我使用
argv
时,程序在没有输入的情况下执行

这是我的密码:

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

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

当我编译和运行时,我必须键入一个示例字符串!字符串始终相同:
ababba
。因此,我将使用第一个参数,而不是stdin。但是
argv[1]
也不起作用

下面是
stream2string()


我认为设置
textLen
也很重要。

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

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

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

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

argv[0]是可执行文件的名称;我想你不想从中读到什么!相反,我认为您应该打开argv[1](在命令行上作为程序的第一个参数给出的文件名)并读取:

intmain(intargc,char*argv[])
{
字符*文本;
int textLen,repNum;
文件*输入;
如果(argc<2){
/*没有争论*/
/*给出错误消息并退出*/
fprintf(stderr,“必须传递参数!\n”);
出口(1);
}
输入=fopen(argv[1],“r”);
如果(!输入){
/*参数是不存在的文件*/
/*给出错误消息并退出*/
fprintf(stderr,“无法读取%s\n”,argv[1]);
出口(1);
}
text=stream2string(输入和文本长度);
fclose(输入);
等等(当然,您可以也应该提供更详细、更有用的错误消息,等等,但是我试图将重点放在您似乎缺少的关键点上)

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

argv[0]是可执行文件的名称;我认为您不想从中读取!相反,我认为您想打开argv[1](作为命令行上程序的第一个参数提供的文件名)并读取:

intmain(intargc,char*argv[])
{
字符*文本;
int textLen,repNum;
文件*输入;
如果(argc<2){
/*没有争论*/
/*给出错误消息并退出*/
fprintf(stderr,“必须传递参数!\n”);
出口(1);
}
输入=fopen(argv[1],“r”);
如果(!输入){
/*参数是不存在的文件*/
/*给出错误消息并退出*/
fprintf(stderr,“无法读取%s\n”,argv[1]);
出口(1);
}
text=stream2string(输入和文本长度);
fclose(输入);
等等(当然,您可以也应该提供更详细、更有用的错误消息,等等,但是我试图将重点放在您似乎缺少的关键点上)

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

不清楚您的问题是什么或您试图实现什么,您能用一个完整的示例程序来说明问题吗?当您有参数时,argc的值是什么?argv[0]应该保留可执行文件的名称;您的第一个参数应该在argv[1]中。不清楚您的问题是什么或您试图实现什么,您能用一个完整的示例程序来说明问题吗?当您有参数时,argc的值是多少?argv[0]应该包含可执行文件的名称;您的第一个参数应该在argv[1]中。在尝试读取输入之前,不要忘了检查fopen的返回值!好的,添加了一些错误检查,试图保持它的简单性(因为我看到没有其他人给出任何代码,我想这再一次证明了试图在上提供帮助是一个错误;-).首先使用argc查看是否至少有1个论点这不是一个错误,我推荐您(并向您投票)因为你对一个不清楚的问题给出了明确的答案,花时间试图合理地解释这个问题。我发表我的评论是因为OP是一个明显的新手,为错误检查树立好的榜样很重要,IMHO,特别是因为我看到这么多有经验的程序员没有做到这一点。@Robert,很好,尽管abundant内联错误检查和消息最终会让初学者感到困惑(它们隐藏了主线逻辑)——顺便说一句,这是异常的一大优点,让错误处理“不受干扰”为了使主线更加鲜明、简单和清晰。无论如何,我放弃了关注和清晰,因为@hiena似乎也认为检查细节以提供正确的信息比让OP了解发生了什么更重要!-)在尝试阅读之前,别忘了检查fopen的返回值从输入中!好的,添加了一些错误检查,试图保持它的简单(因为我看到没有其他人给出任何代码,我想这再次证明了这是一个错误,所以这是一个错误;-)。首先使用argc,看看是否有至少1个参数它不是错误,我推荐你(并支持你)因为你对一个不清楚的问题给出了明确的答案,花时间试图合理地解释这个问题。我发表我的评论是因为OP是一个明显的新手,为错误检查树立好的榜样很重要,IMHO,特别是因为我看到这么多有经验的程序员没有做到这一点。@Robert,很好,尽管abundant内联错误检查和消息最终可能会让初学者感到困惑(它们隐藏了主
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() */
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);