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

  1. Path: sparky!uunet!mcsun!fuug!demos!kiae!glas!demos!cs.cornell.edu!ressler
  2. From: ressler@cs.cornell.edu
  3. Newsgroups: comp.lang.c
  4. Date: 18 Jul 92 08:37 MDT
  5. Subject: Re: (Help) dynamic use of sprintf ?
  6. Sender: Notesfile to Usenet Gateway <notes@glas.apc.org>
  7. Message-ID: <1992Jul18.043753.28919@cs.cornel>
  8. References: <brself.711345285@hal>
  9. Nf-ID: #R:brself.711345285@hal:945470687:1992Jul18.043753.28919@cs.cornel:919521842:001:1127
  10. Nf-From: cs.cornell.edu!ressler    Jul 18 08:37:00 1992
  11. Lines: 30
  12.  
  13.  
  14. In article <1992Jul17.220700.24800@organpipe.uug.arizona.edu> dave@cs.arizona.edu (Dave Schaumann) writes:
  15. >In article <brself.711345285@hal>, brself@hal (Ben Self) writes:
  16. >>Often when formatting strings or converting numerics to alphas, sprintf ()
  17. >>appears as an extremely attractive possibility.  Unfortunately, it does not
  18. >>fit well with dynamic allocation nor is it easily safe guarded from 
  19. >>segmentation faults and bus errors.
  20. >
  21. >[various methods of determining the length of a number's decimal
  22. >[representation deleted
  23. >
  24. >[ Dave's static buffer and copy solution deleted. ]
  25.  
  26. Another solution that avoids the copy is to malloc big and shrink 
  27. wrap.  In TC, sprintf returns the number of characters in the output
  28. string, so this doesn't even require a strlen():
  29.  
  30. buf = malloc(MAX_POSSIBLE_SPRINTF_LENGTH);
  31. len = sprintf(buf, "%d", ...);
  32. buf = realloc(buf, len+1);
  33.  
  34. However, some sprintfs do not return this useful value,
  35. so it's necessary to replace len+1 with strlen(buf)+1.
  36.  
  37. realloc() is usually very fast when it's shrinking, so this is a 
  38. reasonable way to go.
  39.  
  40. For a related idea, see GNU's obstack package.
  41. Gene
  42.  
  43.