带省略号的函数导致段错误

时间:2013-04-19 09:28:19

标签: c segmentation-fault ellipsis

我有以下代码导致段错误

    #define MAPGW_CM_TRACE(...) mapgw_cm_trace(__VA_ARGS__)

功能定义就是这样......

    int mapgw_cm_trace(int trapLog, char *pcMsgId, ...)
   { //do something

    }

我正在调用这样的函数..:

    MAPGW_CM_TRACE(1,"<some String>", 
                23,233, 4783274, 2138123, 23123, 21312,23112); 

我知道我对省略号的了解可能较少。请帮帮我 提前谢谢..

2 个答案:

答案 0 :(得分:1)

我无法想象崩溃的原因。

但请改用以下宏定义

#define MAPGW_CM_TRACE(TRAP,MSGID,args...) mapgw_cm_trace(TRAP,MSGID,##args);

并查看是否修复了崩溃

答案 1 :(得分:0)

什么是pcMsgId,它是一个格式字符串,在这种情况下,每个数字(%d,%u,%ld或%lu)需要匹配%,如果pcMsgId不是格式字符串那么如何mapgw_cm_trace函数知道参数何时结束,对于指针数组,它通常是尾随NULL,对于其他类型,通常有一个count参数。通常情况下,如果pcMsgId不是格式字符串,则以下参数都与pcMsgId的类型相同。基本上,如何确定pcMsgId之后的参数数量。