Fast and Safe C Strings: User friendly C macros to Declare and use C Strings.

Clem Clarke <>
13 Apr 2007 12:48:24 -0400

          From comp.compilers

Related articles
Fast and Safe C Strings: User friendly C macros to Declare and use C S (Clem Clarke) (2007-04-13)
Re: Fast and Safe C Strings: User friendly C macros to Declare and use (Chris Dollin) (2007-04-18)
| List of all articles for this month |

From: Clem Clarke <>
Newsgroups: comp.compilers
Date: 13 Apr 2007 12:48:24 -0400
Organization: Compilers Central
Keywords: C, code, comment
Posted-Date: 13 Apr 2007 12:48:24 EDT

Some 20 years ago, it became clear that C strings were not as safe, nor
as fast, as strings in PL/I, Assembler or Pascal.

The primary reasons are that one needs to find the current length of a
string before or during a copy process - this is very time consuming.

Secondly, there is no way of determining the maximum length of a string,
and therefore when copying to a string, it is easy to over-write
adjacent storage with often disastrous consequences, including the
deliberate introduction of viruses.

Decades have passed and the C string problem continues. Buffer
over-runs are just part of the story, and the bugs that can be
introduced - the safety problem is still with us all and it has come
back to bite all of us on the lower part of our anatomy, over and over

I have spent some years studying this problem and have developed some
User friendly C macros that solve the problem.

These solutions do enhance the speed and safety aspects of all "C"
programs - these benefits of speed and safety can be passed on to your

The main benefits are:

        * Increased speed (up to 20 times for some string handling)
        * More reliability (strings cannot overwrite adjacent storage)
        * Easier coding and debugging (consistent set of macros)
        * Easier external variables

Here is a very short example:

      dcl (op,charvar,253," ",ext); // Variable 'op' is defined
// as an External variable - Max length of 253 characters.
      dcl (symbolic,charfixed,8," ",ext); // Fixed length of 8

      cpylit(op, "This is a 30 character string ");
      cat(op,op); /* Concatenate variable op with it self. Now 60
                                                characters */

      cpy(symbolic,op); /* Truncates it to 8 characters */

      cpy(op,symbolic); /* Copy it back. */

I invite you download the macros and code at where a fuller
discussion can be found.

Clement Clarke

    ,-._|\ Clement V. Clarke - Author Jol, EASYPANEL, OSCAR, 370TO486
/ Oz \ Web:
\_,--.x/ 38 Kings Park Road, West Perth, AUSTRALIA, 6005.
              v Tel (61)-8-9324-1119, Mob 0401-054-155.
[These look somewhat like Dan Bernstein's string library that he wrote
ten years ago, except without the dynamic allocation. -John]

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.