Читать из argv [0] - PullRequest
       20

Читать из argv [0]

0 голосов
/ 03 августа 2009

Как читать с argv[0]? Я использую NetBeans. Каждый раз, когда я должен ввести стандартный ввод. Когда я использую argv, программа выполняется без моего ввода.

Вот мой код:

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

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

UPDATE:

Когда я компилирую и запускаю, я должен набрать пример строки! Строка всегда одна и та же: 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 также важна.

Ответы [ 3 ]

7 голосов
/ 03 августа 2009

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 голосов
/ 03 августа 2009

Попробуйте использовать argv [1] вместо того, чтобы прочитать первый аргумент. argv [0] возвращает имя вызванного исполняемого файла (или имя ссылки на исполняемый файл в системах Unix / Linux).

0 голосов
/ 03 августа 2009

Похоже, вы не установили аргументы программы, когда она запускается в IDE. Это проблема NetBeans - ничего общего с C.

...