簡體   English   中英

C:用fgets()替換gets()時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM