Fgets внутри цикла C - PullRequest
       0

Fgets внутри цикла C

0 голосов
/ 12 мая 2011
  char in[20];
  char out[20];
  for(int i=0; i < nEdges ;i++){

     char str[50];
     fgets(str, 50, stdin);
     char *result = NULL;
     result = strtok(str, " ");
     int count = 0;
     int i = 0;
     char name[2][20];

     while(result != NULL){
       strncpy(name[i],result,20);
       result = strtok( NULL, " ");
       count++;
       i++;
    }

    if(count > 2){
      errorMsg2();
    }else{
      i = strlen(name[1]);
    for(int x=0; x < i ;x++){
      if(name[1][x] == '\n')
        name[1][x] = '\0';
      strncpy(out,name[0],20);
      strncpy(in,name[1],20);
    }

Привет, я пытаюсь прочитать строку и убедиться, что есть только два элемента, иначе сообщение об ошибке. Это все внутри цикла for, когда я запускаю программу, fgets никогда не спрашивала меня о вводе. работает ли fgets внутри цикла?

1 Ответ

0 голосов
/ 12 мая 2011

Не имеет значения, используется ли fgets внутри цикла или нет. Вероятно, есть другая проблема. Лучше всего было бы использовать отладчик, чтобы пройти через него.

Одной потенциальной проблемой является цикл, который превращает strncpy в name. Если в буфере более двух элементов, он будет записывать за пределы массива name. Вероятно, было бы хорошо добавить проверку, чтобы избежать такой возможности до перезаписи (а не после).

Другая возможная проблема - использование переменной i. У вас могут быть некоторые проблемы с областями видимости. Эта переменная используется в основном цикле, а затем обновляется внутри этого цикла с помощью вызова strlen. Это может привести к преждевременному завершению основного цикла (в зависимости от значения nEdges и длины name[1]. В любом случае это, вероятно, нежелательный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...