首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-18 
可变参数函数合法性检查问题?这是个自已写的函数,用于规范日志输出,va_test()安顺序传进需要的参数,现在问

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

函数加个注释

// 调用错误扣奖金

热点排行