11.05.2015

Linux C gets(), puts()

// gets_puts.c
#include <stdio.h>
#include <string.h>

int 
main()
{
    char szTemp[32];

    while (1) {
        printf("Please input a string: \n");
        memset(&szTemp, '\0', sizeof(char) * 32);
        gets(szTemp);
        if (szTemp[0] == '\0')
            break;
        else
            puts(szTemp);
    }

    return 0;
}
fgets(), fputs()gets(), puts()這兩組函式的差異在哪??

1. fgets()的第3個參數,除了可以從檔案 (FILE *fp)讀取之外,也可以從標準輸入 (stdin)讀取,例如:鍵盤;而gets()僅能從標準輸入讀取資料;

2. fputs()的第2個參數,除了可以輸出至檔案 (FILE *fp)之外,還可以輸出至標準輸出 (stdout),例如:螢幕;而puts()僅能做標準輸出;

3. fgets()的第2個參數可以確保使用者所輸入的字串大小,防止OverFlow的問題;

4. fgets()會多送一個換行字元 ('\n');而fputs()則不會;

5. gets()不會送換行字元 ('\n');而puts()則會。

在我的開發環境上 (Fedora Linux 13 i686; gcc (GCC) 4.4.5 20101112)上,甚至還會出現警告訊息 (warning)


warning: the `gets' function is dangerous and should not be used.

警告:`gets'函式是危險的並且不應該被使用。

char *gets(char *s);

int puts(const char *s);

沒有留言:

張貼留言