home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11466 < prev    next >
Encoding:
Internet Message Format  |  1992-07-22  |  2.4 KB

  1. Path: sparky!uunet!mcsun!fuug!demos!kiae!glas!demos!oracle.us!us.oracle.com!wkaufman
  2. From: wkaufman@us.oracle.com
  3. Newsgroups: comp.lang.c
  4. Date: 17 Jul 92 23:52 MDT
  5. Subject: Re: (Help) dynamic use of sprintf ?
  6. Sender: Notesfile to Usenet Gateway <notes@glas.apc.org>
  7. Message-ID: <1992Jul17.195250.16522@oracle.us>
  8. References: <brself.711345285@hal>
  9. Nf-ID: #R:brself.711345285@hal:945470687:1992Jul17.195250.16522@oracle.us:1418735349:001:1925
  10. Nf-From: us.oracle.com!wkaufman    Jul 17 23:52:00 1992
  11. Lines: 45
  12.  
  13.  
  14. In article <brself.711345285@hal> brself@hal.gnu.ai.mit.edu (Ben Self) writes:
  15. ] ...problems w/sprintf and buffer sizing...]
  16. ]
  17. ] I have tried many methods in the past, but am not happy with any yet tried.
  18. ] Some of these include:
  19. ]      . using the return value of fprintf () to a file pointer attached
  20. ]        to /dev/null with the same arg format that I pass to sprintf ()
  21.  
  22.     Oooh, icchh!  All the overhead of opening a useless file, writing to
  23. the file every time, closing the file; the malloc()'s, free()'s and
  24. system calls the stdio functions use.  This solution I'd *absolutely*
  25. argue against.
  26.  
  27. ]      . determining the size of integers by log10 or (in the event I
  28. ]        don't want to link to the math library) dividing by 10 until
  29. ]        it becomes fractional.
  30.  
  31.     It should be sufficient to add up the *maximum* sizes of all the
  32. objects: for example, ints will be, at most, log10(INT_MAX) long.  On my
  33. machine, that's about 11; so, at most, I'm only wasting about 10
  34. bytes--certainly a fair price to pay if I avoid doing log10()'s.
  35.  
  36. ]      . writing my own subset of sprintf () which takes care of this
  37. ]        problem [far more work than it is worth].
  38.  
  39.     That's actually not a bad idea, if you're only using a small subset
  40. of the sprintf() options.  For example, writing one that takes only "%s"
  41. and "%d" would be easy (well, as easy as any variadic function), and you
  42. could handle all the realloc()'s for more memory and return a new
  43. buffer.
  44.  
  45.     Naturally, this all depends on what you're using the buffer for: if
  46. you're just going to print it out to a file or the screen, you'd do best
  47. to avoid the whole issue and fprintf() this stuff directly.
  48.  
  49.                                            -- Bill K.
  50.  
  51. Bill Kaufman,          | "...all conscious species are plastic and
  52. Corporate Lackey       |  all plastic species are conscious."
  53. wkaufman@us.oracle.com |                     -- Yew-Kwang Ng
  54.  
  55.