This is the mail archive of the ecos-devel@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: strcat breaks printf


One other detail. Normally in C/C++, compiled text strings are automatically
null-terminated.
The code below contains this:  ";%d:%f:%f\0"
It could probably be written as: ";%d:%f:%f"
which would save a byte of "precious" memory!

One exception to this rule (if I recall correctly) is this (note array sizes
in brackets):

static const char is_null_terminated[11]     = { "0123456789" };
static const char is_not_null_terminated[10] = { "0123456789" };

Please correct me if I am wrong on this!!

-----Original Message-----
From: ecos-devel-owner@sources.redhat.com
[mailto:ecos-devel-owner@sources.redhat.com]On Behalf Of Alex
Schuilenburg
Sent: Monday, August 16, 2004 7:03 PM
To: wayneg@ananzi.co.za
Cc: ecos-devel@sources.redhat.com
Subject: Re: strcat breaks printf


Wayne Gemmell wrote:

> Hi all
>
> I am writing my first embedded software on ecos. I am also new to C I'm a
REAL
> newb. My problem is with the following code...
>
> <code>
>  smsBody = malloc(161);
>         tmpStr = malloc(100);
>         reset_log_read();
>         smsBody = "tcc";

This is your problem.  You are setting smsBody to point to a static
string and throwing away the malloc'ed memory.  What you want is
           strcpy(smsBody,"tcc");


>
>         puts("Hello");
>         for (j=0;j < 1;j++)
>         {
>                 tmpTime = rec->timestamp;
>         puts("Hello");
>                 sprintf(tmpStr,";%d:%f:%f\0",(unsigned int) tmpTime,
> (float)rec->la,(float) rec->lo);
>                 printf("tmp : %s\n",tmpStr);
>                 strcat(smsBody,tmpStr);

This is where you overwrite the contents of what is in memory after the
static "tcc" string.

-- Alex




>         }
>
>         puts("Hello");
> </code>
>
> And my output is as follows...
>
> Hello
> Hello
> tmp : ;78453:-2614.993896:2822.247070
> 78453:-2614.993896:2822.247070
> 707078453:-2614.993896:2822.247070
>
> This is the smsBody output from further on in the program.
> tcc;78453:-2614.993896:2822.247070
> So the above seems to work. I just don't understand the garbage output
> whenever I use puts or printf.
>
> Could anyone give me any pointers?
>
> Regards
> Wayne Gemmell





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]