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


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]