可变参数函数合法性检查问题?
这是个自已写的函数,用于规范日志输出,va_test()安顺序传进需要的参数,现在问题是如果输错了,程序就segmentation fault,能不能
进行合法性判断吗?否则,日志写错后程序容易出现问题。
想了半天没什么思路啊...
#include<stdarg.h>
#include<stdio.h>
#defineVPN_LOG_LINKD_IP0x00000001
#defineVPN_LOG_LINKD_INF0x00000002
#defineVPN_LOG_LINKD_ECODE0x00000004
void va_test(unsigned int flag, ...)
{
va_listva_ptr;
char*arg_val;
intarg_val_int;
unsigned int wflag=0x10000000;
va_start(va_ptr,flag);
while((wflag = wflag >> 1)){
switch(wflag & flag){
case VPN_LOG_LINKD_IP:
arg_val = va_arg(va_ptr, char*);
printf("ip is %s\n", arg_val);
break;
case VPN_LOG_LINKD_INF:
arg_val = va_arg(va_ptr, char*);
printf("iface is %s\n", arg_val);
break;
case VPN_LOG_LINKD_ECODE:
arg_val_int = va_arg(va_ptr, int);
printf("errcode is %d\n", arg_val_int);
break;
default:
printf("Para N/A \n");
}
}
return;
}
int main()
{
int flag = VPN_LOG_LINKD_IP|VPN_LOG_LINKD_INF|VPN_LOG_LINKD_ECODE;
va_test(flag, 10,"iface00", "192.168.1.111);
}
[解决办法]
输错指什么?误把int当成char*了?这个没法检测。
[解决办法]
你可以使用一个结构体(内含你需要的那3个参数)来取代...
[解决办法]
现在要一个合法性检查来防止程序员输错出先段错误。
函数加个注释
// 调用错误扣奖金