The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
create a thread from a returning function wolwy_pete High Level Programming 3 05-08-2008 12:48 AM
function returns string lalelle Shell Programming and Scripting 5 08-23-2007 02:16 PM
Passing string from function with '*' zam Shell Programming and Scripting 2 06-20-2007 01:19 AM
string function jalburger High Level Programming 7 02-27-2006 08:17 AM
C function to test string or integer qqq High Level Programming 3 03-09-2005 10:55 PM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1  
Old 03-21-2006
Registered User
 

Join Date: Mar 2006
Posts: 6
string returning function

I have two string returning function in ESQL/C

char *segment_name(lbuffer)
char *lbuffer;
{.....

and

char *get_bpdvalue(f_name)
char *f_name;
{......

both declared above main()
char *get_bpdvalue();
char *segment_name();

my problem is segment_name works on sprintf and strcpy while get_bpdvalue only works on strcpy and not sprintf . someone told me that sprintf using string returning function usually has that bug.

ok, i can use strcpy first before i using sprintf but that would make my code longer. and i cant just accept the fact that ESQL/C has that kind of bug . i hope someone can point me here in the right direction , is there something i can do abou the function or its declaration to make it work in sprintf? thanks a lot...
Reply With Quote
Forum Sponsor
  #2  
Old 03-21-2006
Technorati Master
 

Join Date: Mar 2005
Location: Large scale systems...
Posts: 2,610
Quote:
char *segment_name(lbuffer)
char *lbuffer;
{.....

and

char *get_bpdvalue(f_name)
char *f_name;
{......

both declared above main()
char *get_bpdvalue();
char *segment_name();
using older syntax,

can you please post how you have used strcpy and sprintf and where you have the expectation of a probable bug!!!
Reply With Quote
  #3  
Old 03-21-2006
Registered User
 

Join Date: Mar 2006
Posts: 6
char gen_awb[100];

strcpy(gen_awb, get_bpdvalue("gen_awb")); \\will work

sprintf(gen_awb, "%s", get_bpdvalue("gen_awb")); \\will not work, the value of gen_awb will be null if initialized to null or garbage if not.

but on the same case with segment_name function, sprintf will work
Reply With Quote
  #4  
Old 03-21-2006
Technorati Master
 

Join Date: Mar 2005
Location: Large scale systems...
Posts: 2,610
when using sprintf make sure that you have enough storage allocated for that.
Quote:
sprintf(gen_awb, "%s", get_bpdvalue("gen_awb")); \\will not work, the value of gen_awb will be null if initialized to null or garbage if not.
result could be bewildering if storage is not properly allocated. Can you please check with the size returned and size allocated.
Quote:
char gen_awb[100];
Probably I suspect here.
Reply With Quote
  #5  
Old 03-21-2006
Registered User
 

Join Date: Mar 2006
Posts: 6
Quote:
Originally Posted by matrixmadhan
when using sprintf make sure that you have enough storage allocated for that.

result could be bewildering if storage is not properly allocated. Can you please check with the size returned and size allocated.
Probably I suspect here.
yeah i thought that also, but inside the get_bpdvalue function
just before returning the output, i tried printing it and the value is printing properly, always 10 characters only.

my friend, an esql/c programmer too, verified that he also encountered the same error and resorted to using strcpy instead of sprintf, i resorted to that way too, but i just want to know whats causing such an error, and it doesnt always happen because some string returning functions behave properly on sprintf.
Reply With Quote
  #6  
Old 03-23-2006
Registered User
 

Join Date: Mar 2006
Posts: 1
We need more complete code to help you

Hi Jisc,

You really haven't supplied us enough code to be able to help you.

>>segment_name works on sprintf and strcpy while get_bpdvalue only works on strcpy and not sprintf

If there is really a bug in the compiler sprintf implementation regarding %s, then I would expect it to always fail. Not work one time and then fail another. That is not gauranteed, but the odds are high. Also, if the compiler version has been out there a while, something as common as that would have to have been seen and widely reported.

What about if you loop it 50 times, does that same behavior hold up, or does it start failing for both, or intermittently for either?

If gen_awb is really a char array (NOT a char* - error) AND it is large enough so that no memory overwrite occurrs, then most likely the problem is originating in your char *get_bpdvalue() function.

Keep in mind also, IMPORTANT, that memory overwrites elsewhere in your code could be showing up here as a symption, even though the actual problem may not be right here. That is value of the looping test above, see if other problems appear or if the one problem stays consistent.

So anyway, what is the complete body of your char *get_bpdvalue() function?

Where is the code showing the allocation of char gen_awb[100]; and what all you are doing with it?

Show us all the code necessary to help you.

-mc
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 07:15 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0