At 01:51 22.08.2002, Melvyn Sopacua wrote: >At 01:25 22-8-2002, Marcus Börger wrote: > >>At 00:56 22.08.2002, you wrote: >>> >>>Is this what you are looking for? >>> >>>#include <stdio.h> >>> >>>int main() >>>{ >>> double f; >>> char *result; >>> size_t buf_len=1024; >>> >>> result = (char *) malloc(buf_len+1); >>> f = -.3333333333333333; >>> if(snprintf(result, buf_len, "Result is: %f and precision 12: >>> %.12f\n", f, f) < 1) >>> { >>> fprintf(stderr, "Error\n"); >>> } >>> else >>> { >>> printf("%s", result); >>> } >>>} >>> >>>$ ./snprintf >>>Result is: -0.333333 and precision 12: -0.333333333333 >> >>No there are more important issues in compliancy . >>Especially there are libraries out which do not check for the length >>parameter (i already have the code needed for that) > >Ok. > >>The code for you provided does not work because you only >>check for the number of characters written. Instead you must >>check for the '0' in front of the decimal point. E.g: >> >>char buf[10]; >>if (strcmp("0.1", snprintf(buf, sizeof(buf), "%.f", .1))) ... >> >>Besides the return value is different in the libraries, too. Some return >>the length actually written but C99 requires to return the number of >>characters that could have been written if buffer was large enough. > >Then this one is definetely not C99 compliant. Changed the test to: >#include <stdio.h> > >int main() >{ > char buf[5]; > int written; > > written = snprintf(buf, sizeof(buf), "%f", .111); > if (strcmp("0.1", buf)==0 && written == 6) > { > printf("OK\n"); > } > else > { > printf("Not ok: %s (%i)\n", buf, written); > } >} > >Result: >Not ok: 0.11 (5)
How is this, did you mean 3 * '1'? The function is supposed to return the number of characters that could have been written (excluding the terminating \0). >Additionally - with "%.f" it rounds to integer zero. > >Result: >Not ok: 0 (1) > A quick look in the docs says when no precision is given 6 is assumed. So i would expect "0.111" >Met vriendelijke groeten / With kind regards, > >Webmaster IDG.nl >Melvyn Sopacua > > >-- >PHP Development Mailing List <http://www.php.net/> >To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php