Linux C關于輸出函數的定義:
int printf(const char *format,…); int vprintf(const char * format,va_list ap); int vfprintf(FILE *stream,cosnt char *format,va_list ap); int vsprintf(char *str,const char *format,va_list ap); int vsnprintf(char *str,size_t size,const char*format,va_list ap);
?
va_list ap; //首先定義了一個va_list類型的變量
void va_start(va_list ap, last); //va_start的第一個參數va_list變量,第二個參數為函數的最后一個固定參數
void va_end(va_list ap); //用va_end結束迭代
type va_arg(va_list ap,type);
?
使用int_vsnprintf(char* str,size_t size,const char * format,va_list ap); 函數進行格式轉化輸出不定參數函數。
vsnprintf()是c語言庫函數之一,屬于可變參數,用于向字符串打印數據以及數據格式和用戶自定義等。
?
頭文件:#include<stdio.h>
函數聲明:int_vsnprintf(char* str,size_t size,const char *format,va_list ap);
參數說明:
char* str [out]:把生成的格式化的字符串存放在這里。
size_t size [in]: str可接受的最大字節數防止產生數組越界。
const char *format: [in] 指定輸出格式的字符串,它決定了你需要提供的可變參數的類型,個數順序。
va_list ap [in] ,va_list變量,va:variable-argument:可變參數。(就是…里所包含的內容存放到這個變參數的變量當中去);
?
變長數據的讀取方式
va_start(args,fmt); size_t buf_len = vsnprintf(buffer,MAX_LOG_LEN,str_format,args); va_len(args);
可變參數實例:
/*** vsnprintf.c ***/ #include<stdio.h> #include<stdarg.h>void my_print(char *fmt,...) {va_list args;va_start(args,fmt);char buff[1024];vsnprintf(buff,1023,fmt,args);printf("%s\n",buff);va_end(args); }int main() {int age = 78;my_print("hello world");my_print("hello %d",2345);my_print("hello my age is : %d",age);return 0; }
輸出結果:
exbot@ubuntu:~/wangqinghe/C/20190703$ gcc vsnprintf.c -o vsnprintf
exbot@ubuntu:~/wangqinghe/C/20190703$ ./vsnprintf
hello world
hello 2345
hello my age is : 78