This is the mail archive of the
ecos-devel@sources.redhat.com
mailing list for the eCos project.
RE: strcat breaks printf
- From: "Curtis Whitley" <cwhitley at outsitenetworks dot com>
- To: "Alex Schuilenburg" <alexs at ecoscentric dot com>, <wayneg at ananzi dot co dot za>
- Cc: <ecos-devel at sources dot redhat dot com>
- Date: Tue, 17 Aug 2004 09:58:59 -0400
- Subject: 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