读书人

可变参数函数合法性检查有关问题

发布时间: 2012-04-18 15:01:59 作者: rapoo

可变参数函数合法性检查问题?
这是个自已写的函数,用于规范日志输出,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个参数)来取代...
[解决办法]
现在要一个合法性检查来防止程序员输错出先段错误。

函数加个注释

// 调用错误扣奖金

读书人网 >C语言

热点推荐