2015-11-01 43 views
0

如何驗證C中的標準輸入是否爲空? 我有一個學校的項目,我們只允許使用malloc,寫入,閱讀和免費,但唯一的解決方案,我在網上找到使用功能,我不允許使用。 除非您在輸入中沒有放入任何東西,否則我的閱讀完美無缺。如果讀取0爲空,則返回null

這裏是我的代碼:

char *ft_get_buffer(void) 
{ 
    char buf[10]; 
    int    ret; 
    int    count; 
    char *result; 

    count = 0; 
    result = ""; 
    while (1) 
    { 
      ret = read(0, buf, 10); 
      count += ret; 
      if (ret < 10) 
      { 
        buf[ret] = '\0'; 
        result = ft_ralloc(buf, result, count); 
        break ; 
      } 
      else 
        result = ft_ralloc(buf, result, count); 
    } 
    return (result); 
} 

回聲 「測試」 | ./mybinary //正常工作
echo ./mybinary //無限循環

+0

該程序很快在[Wandbox](http://melpon.org/wandbox/permlink/0VH7sPB6aFUkoqiO)上禁用了'ft_ralloc'。嘗試通過打印'ret'來調試,或者麻煩可能在'ft_ralloc'中。 – MikeCAT

+3

如果存在I/O錯誤,則read()返回-1。想想這個。你的代碼在這種情況下做了什麼? – Gene

+0

你試過'回聲測試「| 。/ mybinary'與'test'大小爲'0'? – alk

回答

0

read()將阻塞,除非遇到EOF或信號事件發生。

因此,代碼的read()將「坐」,直到4件事情之一發生:

  1. char S中的請求數量是輸入—回報要求的char計數遇到
  2. EOF —返回數可以是0
  3. 發生信號—執行路徑退出
  4. 一個I/O錯誤發生—返回-1

要檢查任何返回條件立即檢查ret使用該值用於任何目的之前的值。

檢查:

  1. ret ==要求char小號—然後循環的數量來讀取char小號— EOF更
  2. 0 <= ret <請求數量的遇到,處理相應
  3. 0 > ret —發生錯誤,處理錯誤
+0

感謝這個驚人的解釋。 – mrdotb

相關問題