发新话题
打印

关于可变参数 va_arg(src , mode);

关于可变参数 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 *。谢谢。      

TOP

void Trims(char* src, ...)改成* Q% ?3 X! e: Z  J$ d0 {7 [6 x
void Trims(const char* src, ...)      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题