1
我目前有一個問題取代gets()與fgets()。我已經看過了多個這樣做的例子,它看起來很直接,但是我在這樣做的時候會得到意想不到的輸出。在下面的註釋中使用gets()方法,我從我編寫的shell程序中獲得了良好的行爲,但是當我更改爲fgets()調用時,輸入「ls」時輸出「:no such file or directory」 。就像我說的,用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;
}
替代地清除換行符:'{字符* NL =和strchr(輸入,「\ N'); if(nl!= NULL)* nl ='\ 0'; }' – MikeCAT
'輸入[strlen(input)-1]'將會讀出界限,如果空字符串被讀取(如果輸入流被耗盡,則會發生這種情況) –