Returning local string value from a function in C


 
Thread Tools Search this Thread
Top Forums Programming Returning local string value from a function in C
# 1  
Old 05-20-2011
Returning local string value from a function in C

Hi,

If I have a code like this, what are the potential problems do you see?
Code:
const char* const retString() {
    return "hello"; /* string literal */
}

My questions are:

a) Since the string literal which is already a constant read only data (cannot be modifiable), should I need to explicitly mention const in the return type of this function?
b) Also, what this "char* const", const pointer serves here? what happens if it is just normal pointer "char*"?
c) I guess, this version of returning the string literal is re-entrant. May I know how?
d) Can I use reference here in the return type?

Thanks,
Ibrahim
# 2  
Old 05-20-2011
a) It's platform dependent. In most cases you need not, for example, linux, windows xp or latter. In DOS, a string literal may be modified.
b) The value of returned pointer(ie. the address of the pointer) can't be modified.
c) You just read, no write, so it is is re-entrant.
d) There's no reference type in C.
# 3  
Old 05-22-2011
Quote:
Originally Posted by vistastar
a) It's platform dependent. In most cases you need not, for example, linux, windows xp or latter. In DOS, a string literal may be modified.
HP-UX, also.

Yes, you should explicitly mention const. Use const whenever and wherever you don't want the programmer messing with the data's contents. Use it liberally. It's a safety feature.

b) what he said. The pointer is unmodifiable. I don't know if it's useful to return that, but you can have variables declared as that.

c) They don't interfere with each other, therefore no race condition. If two run at the same time, who cares? They don't write anything, don't change anything, don't use anything, don't compete.

d) A pointer is a reference. In C++ you have the & type, which can be a bit dangerous since there's no straightforward way to errorcheck it...
# 4  
Old 05-22-2011
Quote:
Originally Posted by Corona688
HP-UX, also.

d) A pointer is a reference. In C++ you have the & type, which can be a bit dangerous since there's no straightforward way to errorcheck it...
Does't HP-UX put a string literal in readonly section of a executable file? I think this is more a complier thing than OS thing on HP-UX.

Maybe pointers are dangerous than references, because pointers are TYPE related and can be casted to pointer to any object while references are OBJECTS related. Right?

Last edited by vistastar; 05-23-2011 at 02:03 AM..
# 5  
Old 05-23-2011
Quote:
Originally Posted by vistastar
Does't HP-UX put a string literal in readonly section of a executable file?
I'd heard people mention porting problems from HP-UX with code written with the assumption of writable strings.
Quote:
I think this is more a complier thing than OS thing on HP-UX.
More a compiler than OS thing anywhere, nothing stops a compiler from putting it in one kind of segment or another. Some let you choose whether strings are writable.
Quote:
Maybe pointers are dangerous than references, because pointers are TYPE related and can be casted to pointer to any object while references are OBJECTS related. Right?
You can reference a non-object, like a structure, union, or atomic type.

But it's still a pointer and should be checked, but a hidden pointer that acts like a real variable. A pointer you can and should check if it's NULL before you use it, but a reference, you have to take the pointer of it to check, and people frequently don't bother.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Malloc function returning NULL

Hi All, I am using malloc function for allocating dynamic memory. When I am using below code on Linux server its working fine, but When I am trying the same code on HP UNIX server its returning NULL. below is a fragment of code in which it is giving problem. tmp = (format_tree... (4 Replies)
Discussion started by: Taher Saifuddin
4 Replies

2. Programming

Function main returning int?

H friends, As we know, a function returns a value and that value is saved somwhere. like int Sum( int x, int y ) { return x + y; } Total = Sum( 10, 20 ); The value 30 is saved in variable Total. Now the question is, what int value does the function main return, and where is it... (5 Replies)
Discussion started by: gabam
5 Replies

3. Programming

Function Returning Pointer

Hi guys. how a functions such fdopen, ... can return pointer? are these functions use static memory(variables)? (6 Replies)
Discussion started by: majid.merkava
6 Replies

4. Programming

segmentation fault while returning from function.

I am working on the application in which I have to fetch values from the database and paste in url and send it to portal. table=get_result("SELECT serialno,cas,Mode,FLC,TLC,location,CompName,CompCode,FG,FC,DispNo,TruckNo,LWbill,RRGPN,INVNO,DCN,RQTY,DQTY,SQTY,DDATE,RDATE,SDATE,TTIME FROM... (1 Reply)
Discussion started by: er.rohan88
1 Replies

5. Programming

Function Returning Value w/o return stmt

I am working on a C/Unix application from last 2 years which communicates with other systems using proprietary format of my client. We have a function written in C which returns integer, which is response from other system to the request message initiated by my system. This return value is then... (1 Reply)
Discussion started by: dpmore
1 Replies

6. Shell Programming and Scripting

Returning the name of function used

Hi All In my script, I can call on several functions. I have a logging function that is called by any of these functions. What I would like is some way of identifying which function I am using and pass this to the log function as some parameter. Is there some built in command or way of... (3 Replies)
Discussion started by: kingpin2502
3 Replies

7. Programming

returning multiple values from a function in C

hi how can I return multiple values from a C function. I tried the following: #include <stdio.h> void foo(int id, char *first_name, char *last_name) { /* this is just an example to illustrate my problem... real code makes use of the "id" parameter. */ first_name = (char... (8 Replies)
Discussion started by: Andrewkl
8 Replies

8. Shell Programming and Scripting

returning from a function

Hi all, I am very new to BASH shell programming. I need to return an integer from a function to the caller function. I did this: but it keeps giving me wrong return: Can someone help me out here, please? Thanks (2 Replies)
Discussion started by: alirezan
2 Replies

9. Programming

create a thread from a returning function

hi all, my requirement is to create a thread by calling another function. i.e i dont call pthread_create directly from main, but by calling another function (createThd - below ), from main. Example: void *thread_function(void *arg) { /* thread function */ int i; rc =... (3 Replies)
Discussion started by: wolwy_pete
3 Replies

10. Programming

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... (5 Replies)
Discussion started by: jisc
5 Replies
Login or Register to Ask a Question