Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #163462
| From | pozz <pozzugno@gmail.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Automatic strings without malloc |
| Date | 2021-11-18 10:07 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <sn555a$cjo$1@dont-email.me> (permalink) |
| References | <sn2lvp$sl7$1@dont-email.me> <sn2nk2$7mp$1@dont-email.me> |
Il 17/11/2021 12:04, David Brown ha scritto: > On 17/11/2021 11:36, pozz wrote: >> Many times I need to construct a string through a call to sprintf and >> pass it to an external function. >> >> char s[32]; >> sprintf(s, "Hi %s, today is %d/%d/%d", yourname, day, month, year); >> lcd_write(s); >> >> The size of s is fixed and calculated for the maximum length of >> yourname, that is 9. >> >> Later in time, I need to change the message into: >> >> sprintf(s, "Hello %s, today is %d/%d/%d", yourname, day, month, year); >> >> Of course, I need to re-calculate the worst-case length, that should be >> now 35. However this is error-prone and I could forget to change the >> size of array. >> >> Is there a better way to manage this situation? I can't use malloc() >> because I'm on an embedded system where I can't use heap. >> >> I'm thinking to use sprintf(NULL, ...), such as: >> >> const char fmt[] = "Hi %s, today is %d/%d/%d"; >> size_t n = sprintf(NULL, fmt, yourname, day, month, year); >> char s[n + 1]; >> sprintf(s, fmt, yourname, day, month, year); >> lcd_write(s); >> > > That would work (with your follow-up correction). You might want to put > a limit on "n" to avoid accidental stack overflow. This arrangement > does mean that you are doing the printf part twice. I know, this is a drawback. > Very often in small systems you know there is a maximum size - if your > screen is 40 characters wide, then 40 characters is enough in your > array. And if you might need up to 40 characters then you might as well > use all of the 40 chars, even though your string might be shorter - you > really don't want to test your code for the name "Al" on date 1/2/2021 > and then find you have a stack overflow on 10/10/2021 with the name > "Rhoshandiatellyneshiaunneveshenk". (Apparently that's a real name - > according to google!) The example was general, because this is a problem I often have: compose a string now to pass to a function. For LCD example, if you use a variable-width font, it's difficult to calc the maximum chars. It depends how many 'i's are in the string. You could consider the worst case of a string composed by all 'i's... > It is also worth noting that only one task should be calling lcd_write > at a time - otherwise your display will be messed up. You can extend > that and say that only one task will be using the format buffer at a > time, and then it can be a statically array that is shared by all client > code.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Automatic strings without malloc pozz <pozzugno@gmail.com> - 2021-11-17 11:36 +0100
Re: Automatic strings without malloc pozz <pozzugno@gmail.com> - 2021-11-17 11:38 +0100
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-17 03:00 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-17 12:04 +0100
Re: Automatic strings without malloc Manfred <noname@add.invalid> - 2021-11-17 18:19 +0100
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-17 20:34 +0100
Re: Automatic strings without malloc pozz <pozzugno@gmail.com> - 2021-11-18 10:07 +0100
Re: Automatic strings without malloc Thiago Adams <thiago.adams@gmail.com> - 2021-11-17 05:11 -0800
Re: Automatic strings without malloc Philipp Klaus Krause <pkk@spth.de> - 2021-11-18 15:29 +0100
Re: Automatic strings without malloc Bart <bc@freeuk.com> - 2021-11-17 13:47 +0000
Re: Automatic strings without malloc scott@slp53.sl.home (Scott Lurndal) - 2021-11-17 15:34 +0000
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-17 07:36 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-17 16:56 +0100
Re: Automatic strings without malloc scott@slp53.sl.home (Scott Lurndal) - 2021-11-17 18:21 +0000
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-17 20:37 +0100
Re: Automatic strings without malloc scott@slp53.sl.home (Scott Lurndal) - 2021-11-17 21:35 +0000
Re: Automatic strings without malloc Thiago Adams <thiago.adams@gmail.com> - 2021-11-19 05:38 -0800
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-19 07:13 -0800
Re: Automatic strings without malloc William Ahern <william@25thandClement.com> - 2021-11-17 20:46 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-18 10:50 +0100
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-18 03:56 -0800
Re: Automatic strings without malloc Thiago Adams <thiago.adams@gmail.com> - 2021-11-18 05:54 -0800
Re: Automatic strings without malloc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-18 16:38 +0000
Re: Automatic strings without malloc Thiago Adams <thiago.adams@gmail.com> - 2021-11-18 10:52 -0800
Re: Automatic strings without malloc Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-18 11:27 -0800
Re: Automatic strings without malloc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-18 20:41 +0000
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-18 16:05 +0100
Re: Automatic strings without malloc Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-17 11:22 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-17 20:39 +0100
Re: Automatic strings without malloc Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-17 15:18 -0800
[OT] Generally... [Was: Automatic strings without malloc] Jeremy Brubaker <jbrubake@orionarts.invalid> - 2021-11-18 17:46 +0000
Re: [OT] Generally... [Was: Automatic strings without malloc] Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-18 11:21 -0800
Re: Automatic strings without malloc Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-17 11:14 -0800
Re: Automatic strings without malloc pozz <pozzugno@gmail.com> - 2021-11-18 10:08 +0100
Re: Automatic strings without malloc Siri Cruise <chine.bleu@yahoo.com> - 2021-11-18 12:25 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-18 23:19 +0100
Re: Automatic strings without malloc Siri Cruise <chine.bleu@yahoo.com> - 2021-11-18 17:22 -0800
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-19 01:46 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-19 17:29 +0100
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-19 17:26 +0100
Re: Automatic strings without malloc Siri Cruise <chine.bleu@yahoo.com> - 2021-11-19 09:00 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-19 18:25 +0100
Re: Automatic strings without malloc "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-11-19 14:58 -0800
Re: Automatic strings without malloc Guillaume <message@bottle.org> - 2021-11-19 19:37 +0100
Re: Automatic strings without malloc "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-11-19 12:34 -0800
Re: Automatic strings without malloc Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-11-19 13:44 -0800
Re: Automatic strings without malloc David Brown <david.brown@hesbynett.no> - 2021-11-20 13:30 +0100
Re: Automatic strings without malloc luser droog <luser.droog@gmail.com> - 2021-11-20 20:49 -0800
csiph-web