关于可变参数 va_arg(src , mode);
小弟写了下面的程序:3 I/ ?% K& t) I' }: B
2 O! |' Z/ c1 P$ y# H
void Trims(char* src, ...)
d* e# T, A5 c- m{ ! C" S2 b8 x: d* D [% {0 N$ n
va_list marker;
$ w) l+ D9 F# B4 Q v: _, y3 C( W va_start(marker,src);
: r4 |4 A6 H( E0 v0 ? char *field=src;
* X. G: l0 J# T v7 W* a Trim(field);
`0 E& c! \! ]) ^+ _7 [ for( ; field=va_arg(marker,char *) ; )6 N& [ }' `# r$ M+ a9 b
{ 3 _, W/ d( p) f5 D
if(sizeof(field) != sizeof(char *))7 |9 U( y0 Z2 ~3 g; g7 s( Q0 D
return;
+ V2 b- w# q" @5 E if(!strlen(field))% t, z: F$ P. F/ @9 q7 Y3 i
continue;
. {# j5 v B% P, ? Trim(field);
; D O, M% A3 p } 2 C/ j3 G9 t0 j
va_end(marker); " B8 o$ c, y8 N6 u2 `* P
}# {, K" o" `/ h: I" K4 E
& H1 w _" }! D9 y2 E对于一般的char *都是没问题的,但是放到服务里面跑就不行了,有的时候printf("%d",field); 是8,有的时候是1654938392什么的,不等于NULL,*field也不是NULL,导致服务死掉。不得已又写了下面这样:
6 J: C! B S$ b M0 Fvoid Trims(int i,char* src, ...){ 1 E, ~/ Q2 F- e/ s
int j=0; ' c, [* P+ f7 R
va_list marker; 7 T2 V3 n4 |5 T9 A% d% j: i
va_start(marker,src);
" u9 g/ S! w+ Wchar *field=src;' X0 a- J* i# D6 f% [* B$ N
for(j=0;j<i;field=va_arg(marker,char *), j++)
1 ?, X* _3 f+ b& |) L9 u! w# r {
4 \6 L) l3 V. q& w Trim(field);* K( j- p! t& Z u) ?- b
}
( Q) y" o- \8 A$ f, N va_end(marker);& @! z8 j4 p. a- O3 U: K
}0 {: o1 @: ~% h
. G. ?5 y/ j2 A# Z9 B2 B; w这个是好用了,但是前面要加一个int的长度,感觉很不爽。那为高人能指点一下,这个va_arg(marker,char *)返回的到底是什么东西,能不能有什么方法判断他是不是char *。谢谢。