[英]C: error replacing gets() with fgets()
我目前在用fgets()替換gets()時遇到問題。 我已經看過多個執行此操作的示例,這看起來非常簡單,但是這樣做卻得到了意外的輸出。 在下面的注釋中使用gets()方法,可以從正在編寫的Shell程序中獲得良好的行為,但是當我更改為fgets()調用時,在輸入“ ls”時得到的輸出為“:no such file or directory” 。 就像我說的那樣,使用gets()調用可以正常工作。 下面的代碼:
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;
}
與gets
不同, fgets
將讀取換行符並將其存儲在字符串中。
從手冊頁:
fgets()
最多從流中讀取小於大小的字符,並將它們存儲到s所指向的緩沖區中。 在EOF
或換行符之后停止讀取。 如果讀取換行符,則將其存儲到緩沖區中。 緩沖區的最后一個字符之后將存儲一個'\\0'
。
您可以通過將換行符替換為空字節來刪除換行符(如果存在):
fgets(input, sizeof(input), stdin);
if (input[strlen(input)-1] == '\n') input[strlen(input)-1] = '\0';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.