sprintf函數:
功能
頭文件
原型
參數列表
snprintf函數:
數原型:
int snprintf(char *str, size_t size, const char *format, ...);
template<typename T> string String(const T& t, const string& fmt) { char* buf; if (asprintf(&buf, fmt.c_str(), t) < 0) { fprintf(stderr, "asprintf(%s) : %s\n", fmt.c_str(), strerror(errno)); return ""; } string str(buf); free(buf); return str; }
vsprintf()函數中的自變量是位於數組中的,數組元素的字符串之前都要加上百分號(%)。這個函數是“一步一步[step-by-step]”按順序執行。在第一個%后,將插入第一個數組元素;在第二個%后,將插入第二個數組元素,依次類推。
vsprintf是sprintf的一個變形,它只有三個參數。vsprintf用於執行有多個參數的自訂函式,類似printf格式。vsprintf的前兩個參數與sprintf相同:一個用於保存結果的字元緩沖區和一個格式字串。第三個參數是指向格式化參數陣列的指標。實際上,該指標指向在堆疊中供函式呼叫的變數。va_list、va_start和va_end巨集(在STDARG.H中定義)幫助我們處理堆疊指標。本章最后的SCRNSIZE程式展示了使用這些巨集的方法。使用vsprintf函式,sprintf函式可以這樣編寫:
int sprintf (char * szBuffer, const char * szFormat, ...){ int iReturn ; va_list pArgs ; va_start (pArgs, szFormat) ; iReturn = vsprintf (szBuffer, szFormat, pArgs) ; va_end (pArgs) ; return iReturn ;}
va_start巨集將pArg設置為指向一個堆疊變數,該變數位址在堆疊參數szFormat的上面。
函數名: vsprintf
功 能: 送格式化輸出到串中
用 法: int vsprintf(char *string, char *format, va_list param);
vsprintf(buffer, fmt, argptr);
fmt="%d %f %s"
就是把后面的參數按照 "%d %f %s" 這個格式輸出到 buffer 中。