size limits for string literals

C

copx

Do the standards say anything about size limits for string literals (min
size, max size)? I want to know this to make sure that my code is portable.
The program in question is ANSI C89, but I would also be interested in
whether or not ISO C99 changed the limits (if any exist).
 
R

Richard Bos

copx said:
Do the standards say anything about size limits for string literals (min
size, max size)? I want to know this to make sure that my code is portable.
The program in question is ANSI C89, but I would also be interested in
whether or not ISO C99 changed the limits (if any exist).

Minima, of course not; an empty string is valid in any language. The
notional limit on the size of a string literal in The One Program (and
see discussions of that program in this newsgroup over the years to know
why all these limits are always slightly misleading) is 509 characters
in C89, and 4095 in C99. Both of these are valid for normal and wide
strings, and _after_ concatenation (so you can't get around them with a
trick like "almost_too_long_string" "another_long_string").

Richard
 
R

Richard Heathfield

copx said:
Do the standards say anything about size limits for string literals (min
size, max size)?

Clearly, the minimum size is 1 (because sizeof "" is 1).

The maximum size of a string literal or wide string literal (after
concatenation, e.g. from "foo" "bar" to "foobar") that an implementation
*must* support is 509 in C90. This has been increased to 4095 in C99.

So if all your string literals are shorter than that, you will not break
anything. If you make them longer, you're relying on your implementation
being nice to you.

<snip>
 
W

Walter Roberson

Richard Bos said:
Minima, of course not; an empty string is valid in any language.

I believe I've worked with some languages which did not support
empty strings, but it has been long enough since then that I could
not name any specifics.
 
C

CBFalconer

copx said:
Do the standards say anything about size limits for string literals (min
size, max size)? I want to know this to make sure that my code is portable.
The program in question is ANSI C89, but I would also be interested in
whether or not ISO C99 changed the limits (if any exist).

Yes they do. I believe the C89/C90/C95 limit is roughly 510 bytes,
and that C99 expanded it to roughly 1020 bytes. Look in the C
standard.

Some useful references about C:
<http://www.ungerhu.com/jxh/clc.welcome.txt>
<http://c-faq.com/> (C-faq)
<http://benpfaff.org/writings/clc/off-topic.html>
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf> (C99)
<http://cbfalconer.home.att.net/download/n869_txt.bz2> (C99, txt)
<http://www.dinkumware.com/c99.aspx> (C-library}
<http://gcc.gnu.org/onlinedocs/> (GNU docs)
<http://clc-wiki.net/wiki/C_community:comp.lang.c:Introduction>
 
R

Richard Heathfield

CBFalconer said:
Yes they do. I believe the C89/C90/C95 limit is roughly 510 bytes,

509 - not so far off...
and that C99 expanded it to roughly 1020 bytes.

....but I don't think 4095 can be plausibly called "roughly 1020".
 
C

CBFalconer

Richard said:
CBFalconer said:

509 - not so far off...


...but I don't think 4095 can be plausibly called "roughly 1020".

True. However, if we express the values with logarithms, it is
only an error by a factor of 2. Trivial. :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,024
Latest member
ARDU_PROgrammER

Latest Threads

Top