簡體   English   中英

fgets 是否總是從字符串的開頭讀取?

[英]Will fgets always read from the beginning of the string?

我需要使用 fgets 來讀取由換行符分隔的多行標准輸入(例如。

Hello
world
!

)。 如果我在 for 循環中包含 fgets,它會在每次迭代期間從第一行讀取嗎? 如果是這樣,我將如何實現這一目標?

fgets 是否總是從字符串的開頭讀取?

否。 fgets()基於當前 state 讀取,這可能部分進入用戶輸入行。 它不會以某種方式神奇地 go 回到開頭 - 只是從stream當前定位的位置開始。

fgets()不讀取字符串 它讀取一行輸入並將輸入轉換為字符串 @Fe2O3 讀取null 字符時,它不會停止。

fgets()讀取到:

  • 讀取'\n'

  • 滿足fgets()中傳遞的 size - 1 。

  • 遇到文件結尾或輸入錯誤(例如,錯誤的 stream 模式、奇偶校驗錯誤、月相輸入錯誤……)

如果我在 for 循環中包含 fgets,它會在每次迭代期間從第一行讀取嗎? 如果是這樣,我將如何實現這一目標?

首先在使用fgets()之前,請確保閱讀了整個前一行。
第二:如果使用fgets()后的這行輸入不完整,完成它。

char buf[N];
if (fgets(buf, sizeof buf, stdin) {
  size_t len = strlen(buf);
  if (len + 1 == sizeof buf && buf[sizeof buf - 2] != '\n')) {
    // User input is not complete, read rest of line.
    int ch;
    while ((ch = getchar() != '\n') ** ch != EOF) {
      ;
    }
  }    

迂腐fgets()不是一個很好的輸入 function 如果輸入可能包含null 字符 在這種情況下,需要更先進的技術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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