У меня в настоящее время проблема с заменой gets() на fgets(). Я рассмотрел несколько примеров этого, и это кажется очень прямым, однако я получаю неожиданный результат при этом. Используя метод gets() в комментариях ниже, я получаю хорошее поведение от своей программы оболочки, которую я пишу, однако, когда я перехожу к вызову fgets(), я получаю вывод «: нет такого файла или каталога» при подаче ввода «ls», , Как я уже сказал, с вызовом gets() он работает нормально. код ниже:C: ошибка замены gets() с помощью fgets()
int main(void) {
while(1) {
int i = 0;
printf("$shell: ");
scanf("%s", first);
/* gets(input);*/
fgets(input, sizeof(input), stdin);
//...parse input into tokens for exec system call...
execvp(first, args);
}
return 0;
}
Альтернативный способ удаления символа новой строки: '{символ * п = strchr (вход,«\ п '); if (nl! = NULL) * nl = '\ 0'; } ' – MikeCAT
' input [strlen (input) -1] 'будет считываться за пределы, если пустая строка была прочитана (это может произойти, если поток ввода исчерпан) –