puts和fputs函數及其區別,C語言puts和fputs函數詳解

2020-07-16 10:04:23
與 gets 函數一樣,對於 puts 函數,同樣建議使用 fputs 函數來代替 puts 函數。如下面的範例程式碼所示:
int main(void)
{
    char buffer[11];
    fgets(buffer,11,stdin);
    fputs(buffer,stdout);
    return 0;
}
其中,puts 函數的原型如下所示:

int puts(const char *str);

我們知道,puts 函數主要用於向標準輸出裝置(螢幕)寫入字串併換行,即自動寫一個換行符('n')到標準輸出。理論上,該函數的作用與“printf("%sn",str);”語句相同。但是,puts 函數只能輸出字串,不能進行相關的格式變換。與此同時,它需要遇到 null('') 字元才停止輸出。因此,非字串或無 null('') 字元的字元陣列最好不要使用該函數列印,否則無法正常結束。如下面的程式碼所示:
int main(void)
{
    char str[] = {'H','E','L','L','O'};
    puts(str);
    return 0;
}
在上面的範例程式碼中,因為字元陣列 str 在結尾處缺少一個 null('') 字元(也就是說它不是一個嚴格意義上的字串)。因此,在呼叫 puts 函數的時候,程式將不知道什麼時候停止輸出,從而導致輸出結果未定義。執行結果如下圖所示:


圖 1 範例程式碼的執行結果(Microsoft Visual Studio 2010)