關於printf的幾個C語言庫函式

2021-06-19 11:20:33 字數 1517 閱讀 6277

一、_vsnprintf,c語言庫函式之一,屬於可變引數。用於向字串中列印資料、資料格式使用者自定義。

函式原型: int vsnprintf(char* str,size_t size,const char* format,va_list ap);

引數說明: char* str[out] ,把生成的格式化的字串放入此變數。

size_t [in] ,str可接受的最大位元組數,防止產生陣列越界。

const char* format[in],指定輸出格式的字串,他決定了你需要提供的可變引數的型別、個數和順序。

va_list ap[in],va_list變數,va:variable-argument:可變引數。

功能: 將可變引數格式化到乙個字元陣列。對比與vsprintf,增加了size限制,防止記憶體溢位。

但是格式化完成後沒有加字串結束符\0,所以要根據函式返回值,然後給字串加字元結束符。

具體用法:需要先建立指向引數的指標va_list first; 然後就可以格式化,結束後要**va_end(first);

void display(const char* format,...)

; va_list first;

va_start(first,format);

int nlen = _vsnprintf(szbuffer,sizeof(szbuffer),format,first);

va_end(first);

if (nlen)

printf("%s\n",szbuffer);

}int _tmain()

呼叫成功返回字串的大小,失敗返回負數。

二、第二個是_snprintf,將可變個引數(。。。)按照format格式化成字串,然後複製到str中。

int _snprintf(char* str,size_t size, const char* format,...);

如果格式化後的字串長度小於size,則將此字串全部複製到str中,並給其後新增乙個字串結束符。

如果格式化後的字串長度》=size,則只將其中的(size - 1)個字元複製到str中,並給其後新增乙個字串結束符。返回值為格式化後的字串長度。

這個函式的可操作性就比較強。

若成功則返回欲寫入的字串長度,若出錯則返回負值。

char szbuffer[1024] = ;

systemtime ctime;

::getlocaltime(&ctime);

int nlen = _snprintf(szbuffer,sizeof(szbuffer),"%.4d %.2d %.2d ---%.2d:%.2d:%.2d\n",

ctime.wyear,ctime.wmonth,ctime.wday,ctime.whour,ctime.wminute,ctime.wsecond);

if (nlen)

這個函式還是比較省心的。暫時就先用這兩個函式。

關於C語言的幾個細節

1sizeof不是函式,而是運算子。2 編譯器解析的時候是忽略型別名的,const 離誰近就修飾誰。const int p p 可變,p 指向的物件不可變 intconst p p 可變,p 指向的物件不可變 int const p p 不可變,p 指向的物件可變 const int const p...

關於C語言的幾個細節

1 sizeof 不是函式,而是運算子。2 編譯器解析的時候是忽略型別名的,const 離誰近就修飾誰。const int p p 可變,p 指向的物件不可變 int const p p 可變,p 指向的物件不可變 int const p p 不可變,p 指向的物件可變 const int cons...

C語言printf用法

printf的原型 int printf const char format,不同於python的動態型語言,當使用 printf j 時會報錯 d 是輸出控制符,d 表示十進位制,後面的 i 是輸出引數 那麼現在有乙個問題 i 本身就是十進位制,為什麼還要將 i 以十進位制輸出呢?因為程式中雖然寫...