473,550 Members | 2,391 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Return C-style string from function?

#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.

Oct 23 '06 #1
10 6742

"howa" <ho******@gmail .comwrote in message
news:11******** *************@b 28g2000cwb.goog legroups.com...
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.
When the function finishes the string s goes out of scope,
and, since its in the stack, it becomes garbage.

A quick fix is to change the line
return s.c_str();
to
return strdup(s.c_str( ) );

Serafeim
Oct 23 '06 #2
In article <11************ *********@b28g2 000cwb.googlegr oups.com>,
"howa" <ho******@gmail .comwrote:
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.
const char* test( char* src ) {
return src;
}

--
To send me email, put "sheltie" in the subject.
Oct 23 '06 #3

Papastefanos Serafeim 寫道:
"howa" <ho******@gmail .comwrote in message
news:11******** *************@b 28g2000cwb.goog legroups.com...
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.

When the function finishes the string s goes out of scope,
and, since its in the stack, it becomes garbage.

A quick fix is to change the line
return s.c_str();
to
return strdup(s.c_str( ) );

Serafeim
Thanks...

is this a usual/normal way to pass a string out of a function?

Oct 23 '06 #4
"howa" <ho******@gmail .comwrote:
Papastefanos Serafeim wrote:
>"howa" <ho******@gmail .comwrote:
>>#include <iostream>

using namespace std;

const char* test(char *src) {
string s(src);
return s.c str();
}

int main() {
char src[] = "test123";
cout<<test(src) ;
return 0;
}

how to get the "test123" from the function?

thanks.

When the function finishes the string s goes out of scope,
and, since its in the stack, it becomes garbage.

A quick fix is to change the line
return s.c str();
to
return strdup(s.c str() );

Serafeim

Thanks...

is this a usual/normal way to pass a string out of a function?
No. strdup isn't even defined in the language. The usual way to do it is
by returning a string that was passed in. See: strcpy for an example.

--
To send me email, put "sheltie" in the subject.
Oct 23 '06 #5
howa wrote:
is this a usual/normal way to pass a string out of a function?
No, this is just a way to stop using RAII, hence creating non
exception-safe code and a memory leak in various situations.
This also has many other obvious problems related to pointers.
Oct 23 '06 #6
howa posted:
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

The memory which the string occupies must still be accessible after the
funciton returns. Therefore, either:

(1) Have the calling function allocate the memory, and pass a pointer so
that the called function will alter the memory.

(2) Have the called function allocate the memory dynamically, and return a
pointer which the calling function shall have to delete.

(3) Use global/static data...

--

Frederick Gotham
Oct 23 '06 #7
howa wrote:
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.
const char* test(char *src)
{
return src;
}

OR

const char* test(char *src)
{
static string s(src);
return s.c_str();
}

OR

const char* test(char *src)
{
string* s = new string;
*s = src;
return s->c_str();
}

Best regards,
-Martin

Oct 23 '06 #8
const char* test(char *src)
{
string* s = new string;
*s = src;
return s->c_str();
}
I forgot to tell you: that's not good,
because I create a memory leak here.
String s cannot be deleted anywhere.

-Martin

Oct 23 '06 #9
"howa" <ho******@gmail .comwrote in message
news:11******** *************@b 28g2000cwb.goog legroups.com...
#include <iostream>

using namespace std;

const char* test(char *src) {

string s(src);

return s.c_str();
}

int main() {

char src[] = "test123";

cout<<test(src) ;

return 0;
};

how to get the "test123" from the function?

thanks.
You're going to have problems no matter what method you decide to return a
c-style string. The best solution is to return a std::string. That's why
std::strings were invented, to get rid of this problem. What can returning
a c-style string get you that returning a std::string can't?
Oct 23 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
23484
by: Paul | last post by:
Hi, In SQL Books Online in the section on @@Error it gives the following example: -- Execute the INSERT statement. INSERT INTO authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@au_id,@au_lname,@au_fname,@phone,@address,
2
4653
by: Rhino | last post by:
I am trying to verify that I correctly understand something I saw in the DB2 Information Center. I am running DB2 Personal Edition V8.2.1 on Windows. I came across the following in the Info Center: To return a result set from a procedure to the originating application, use the WITH RETURN TO CLIENT clause. When WITH RETURN TO CLIENT is...
1
4647
by: Jack Addington | last post by:
I have a 3rd party object that fires an itemchanged event when someone edits some data on a form. This event has a custom eventArgs that has a field called ActionCode. In the code of the event, if you set this ActionCode to various values the control will respond in various ways (reject, reject change field, accept, etc). I am trying to...
2
5544
by: 6kjfsyg02 | last post by:
I am trying to return one of two different objects from the same method, but I can not do it in WSDL or C#. I have a web service with three methods. I have been told that one of the methods must return either <Respuesta ....> or <ConfirmacionPeticion ...> directly under the SOAP Body. Other methods are already capable of returning just...
6
2543
by: miked | last post by:
Why are there still no covariant return types? All searches reveal no workarounds accept for using an interface which is a real pain. I wind up missing this capability almost every time I inherit a class. The best workaround and one that I use is the new keyword and cast the base class reference, but in my opinion this is a bad practice...
14
20935
by: tshad | last post by:
Is there any difference between Return and Exit Sub? I have some code that uses both when I have an error in my Sub. Thanks, Tom
8
1633
by: WakeBdr | last post by:
I'm writing a class that will query a database for some data and return the result to the caller. I need to be able to return the result of the query in several different ways: list, xml, dictionary, etc. I was wondering if I can use decorators to accomplish this. For instance, I have the following method def getUsers(self, params):...
9
3996
by: Alexander Widera | last post by:
hi, is it possible to return an object of an unknown (but not really unknown) type with an method? i have the following situation: - a variable (A) of the type "object" which contains the object - a variable (B) of the type "Type" which contains the type of the object in (A) (A should be of the type B) - a method which should return the...
0
1300
by: terminator(jam) | last post by:
Since delaration of C++ the r/l-valueness of objects has been source of confusion there are some actions that can perform on lvalues but not on rvalues , especifically on initrinsic types .BTW the programmer is not capable of defining special interface for classes based on the r/l-valueness of the object(the way we do for const/volatile).Move...
4
2002
by: fabian.lim | last post by:
Hi All, Im a newbie to C++, I am trying to customize the vector template STL to a template Class. My code is shown below. Im confused about something and maybe somebody here might be able to help me. Lets say X is my vector, which contains 10 elements. I want to assign elements indexed 2 to 5 to another vector Y, so I want to do it like...
0
7999
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7520
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
6101
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development projectplanning, coding, testing, and deploymentwithout human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
0
5129
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
0
3532
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in...
0
3517
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
1978
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
1
1094
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
0
801
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.