一、_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 以十進位制輸出呢?因為程式中雖然寫...