用C標准庫中的vsprintf函數自制打印輸出函數


C語言中具有不定參數個數的函數定義,因此可以很靈活地定義一些不確定實參個數的函數。像C標准庫中的printf函數就是如此。

在某些時候,比如在做嵌入式設備,我們自己開發一套打印調試數據的接口(比如通過UART或USB),如果自己完全根據printf中的數據格式來寫比較浪費時間和資源。幸虧C語言標准庫中提供了vsprintf庫函數能夠將標准的格式字符串與后面的參數自動組織成printf輸出的字符串式樣。這樣我們可以直接通過使用這個庫函數來寫自己定制的輸出函數。

請參照以下代碼:

#include <stdio.h>
#include <stdarg.h>

static void MyPrint(const char *s, ...)
{
    char buffer[512];   // 分配512字節的字符串緩存
    
    va_list ap;
    va_start(ap, s);
    vsprintf(buffer, s, ap);    // 將格式字符串與后面的參數綁定為一個字符串,拷貝到輸出緩存
    va_end(ap);
    
    // 這里寫自己的打印輸出函數,比如這里用puts
    puts(buffer);
}

int main(void)
{
    MyPrint("Hello, the value is: %d, %s, %f", 100, "OK", -0.5f);
}

上述代碼就用puts標准庫函數來模擬自定義的輸出打印函數。應該說非常簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM