关于可变参数 va_arg(src , mode);
小弟写了下面的程序:
, G9 u2 i5 Z0 q. L
5 U$ d/ j( l7 x/ i' ~2 L5 gvoid Trims(char* src, ...)/ P* d9 z' u' y/ z3 }
{
. ]5 E9 I- b& V% F va_list marker; 0 d2 ~/ s* Y& p+ e! ? S
va_start(marker,src); 3 j R0 W6 V# p8 @
char *field=src;! P# L# p+ Q, K& J8 }+ k
Trim(field);1 F2 y9 O1 l* {- E7 G0 O
for( ; field=va_arg(marker,char *) ; )
1 a4 @$ E: I, _% m7 m! q, { {
( ?4 D$ a9 p% w( G2 k: D5 `4 O if(sizeof(field) != sizeof(char *))
) h$ T# `, y9 O2 i3 y0 q return;
: G* k0 O! Z- |. W6 L" f: k3 r if(!strlen(field))
9 n, i4 i( @1 R( R$ @ continue;) Z7 M5 q$ y, z5 E
Trim(field);
' X1 Q. }9 t% m. A$ I5 I0 M } ) d5 d& A* Q8 w7 @/ y
va_end(marker); . T. T5 e( v- G. Q$ w
}: R, s% h- J4 P+ C( t/ ?
2 \9 x" m7 D# y" L. a7 B' P: y: v对于一般的char *都是没问题的,但是放到服务里面跑就不行了,有的时候printf("%d",field); 是8,有的时候是1654938392什么的,不等于NULL,*field也不是NULL,导致服务死掉。不得已又写了下面这样:. g& ?% t- f d, A& e
void Trims(int i,char* src, ...){ - w4 ~2 v- X0 @& f/ I" N1 q
int j=0;
; d3 R# G/ S+ E6 R/ C5 E2 v va_list marker; : o- M: I N1 ~ R
va_start(marker,src); 1 W& v- I9 e3 X& X' M
char *field=src;
/ Q! X3 J6 D2 ~$ x. j for(j=0;j<i;field=va_arg(marker,char *), j++)3 A& F" P5 O# n8 q, u
{9 F: X, m7 n- p) [* t3 G
Trim(field);: a" I8 N$ D z. v% R: W7 ^
}
0 e5 s/ j* Z; x$ I va_end(marker);! V& b$ P, p0 h; h6 `9 a8 B
}
1 u6 D3 S! [( [+ `' B8 Z2 P/ J6 T+ k4 h
这个是好用了,但是前面要加一个int的长度,感觉很不爽。那为高人能指点一下,这个va_arg(marker,char *)返回的到底是什么东西,能不能有什么方法判断他是不是char *。谢谢。