From: Hoehle, Joerg-C. <Joe...@t-...> - 2004-11-26 12:47:36
|
Hi, St=E9phane Legrand wrote: >> int i; >> printf("match %2d: %2d %2d\n",i, >> matches[i].rm_so,matches[i].rm_eo); }}} >And indeed, if you replace:=20 > printf("match %2d: %2d %2d\n",i, >with > printf("match %2d: %lld %lld\n",i, >you get a right answer This code is as broken as the original one. C does AFAIK not provide = for printf() to infer a %d form that matches the variant of int passed = as argument. Therefore, explicit casting is your only choice. rm_so/eo is of type regoff_t, itself of type int on my Suse Linux 8.1 = x86 box. Your example reveals that your machine uses another type. Use printf %ld (long) rm_so or printf %d (int) rm_so or printf %lld (what's that?) rm_so according to your taste and expectations. IIRC, the value is signed, because -1 is returned for nonmatches. Regards, J=F6rg H=F6hle |