自定义日志函数--可变参数列表
原型:
int RM_LIB_SendToIC(int ulSubModuleID, int ulLevel, const char *pcMsg, ...)
实现:
#include <iostream>
#include <stdarg.h>
using namespace std;
/*
1、可变的参数,如果为空,那么va_list的内容就是空 “”, 但是va_list 指针不是空
所以满足vsprintf_s的使用条件
2、sprintf_s是由vsprintf_s实现的,这里封装的函数类似于sprintf_s,
3、这里不可以把vsprintf_s换成sprintf_s,因为sprintf_s不接收 va_list参数
*/
int RM_LIB_SendToIC(int ulSubModuleID, int ulLevel, const char *pcMsg, ...)
{
va_list pvaTmp;
int lStrLen = 0;
char sz[128] = { 0 };
/* Get the formatted string */
va_start(pvaTmp, pcMsg); //pvaTmp内容为"
if (pcMsg && *pcMsg) {
lStrLen = vsprintf_s(sz, 128, pcMsg, pvaTmp);
}
va_end(pvaTmp);
cout << sz << endl;
return 1;
}
int main11()
{
RM_LIB_SendToIC(1, 1, "hello%x="); //这时候会访问栈越界,但不会报错。
return 0;
}
小结:
可变的参数,如果为空,那么va_list的内容就是空 “”, 但是va_list 指针不是空
所以满足vsprintf_s的使用条件

浙公网安备 33010602011771号