C語言中文網 目錄

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

與 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("%s\n",str);”語句相同。但是,puts 函數只能輸出字符串,不能進行相關的格式變換。與此同時,它需要遇到 null('\0') 字符才停止輸出。因此,非字符串或無 null('\0') 字符的字符數組最好不要使用該函數打印,否則無法正常結束。如下面的代碼所示:
int main(void)
{
    char str[] = {'H','E','L','L','O'};
    puts(str);
    return 0;
}
在上面的示例代碼中,因為字符數組 str 在結尾處缺少一個 null('\0') 字符(也就是說它不是一個嚴格意義上的字符串)。因此,在調用 puts 函數的時候,程序將不知道什么時候停止輸出,從而導致輸出結果未定義。運行結果如下圖所示:


圖 1 示例代碼的運行結果(Microsoft Visual Studio 2010)

正確的做法是應該在字符數組 str 的結尾處添加一個 null('\0') 字符,如下面的示例代碼所示:
char str[] = {'H','E','L','L','O','\0'};
fputs 函數的函數原型如下所示:

int fputs(const char *str, FILE *stream);

相對于 puts 函數,fputs 函數用來向指定的文件寫入一個字符串(不換行)。當然,也可以使用 stdout 作為參數進行輸出顯示(它同樣需要遇到 null('\0') 字符才停止輸出),如下面的代碼所示:
int main(void)
{
    char str[] = {'H','E','L','L','O','\0'};
    fputs(str,stdout);
    return 0;
}
其運行結果如下圖所示:

圖 2 示例代碼的運行結果(Microsoft Visual Studio 2010)

當然,fputs 函數主要用于對指定文件進行寫入操作,如下面的示例代碼所示:
int main(void)
{
    FILE *fp=NULL;
    fp=fopen("myfile.txt","wb");
    if(fp == NULL)
    {
        printf("不能夠訪問該文件.\n");
        exit(1);
    }
    fputs("this is a test", fp);
    fclose(fp);
    fp=NULL;
    return 0;
}
運行上面的示例代碼,文件“myfile.txt”會被寫入一行“this is a test”字符串。

與 fgetws 一樣,C99 同樣也提供了 fputs 函數的寬字符版本 fputws,其函數的一般原型如下面的代碼所示:

int fputws(const wchar_t * restrict s, FILE * restrict stream);

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo