#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. 10 6715
"howa" <ho******@gmail.comwrote in message
news:11*********************@b28g2000cwb.googlegro ups.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
In article <11*********************@b28g2000cwb.googlegroups. 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.
Papastefanos Serafeim 寫道:
"howa" <ho******@gmail.comwrote in message
news:11*********************@b28g2000cwb.googlegro ups.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?
"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.
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.
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
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
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
"howa" <ho******@gmail.comwrote in message
news:11*********************@b28g2000cwb.googlegro ups.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?
In article <45**********@news.arcor-ip.de>,
Martin Steen <a0******************@spamgourmet.comwrote:
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();
}
Note, that last one leaks memory every time it is called.
--
To send me email, put "sheltie" in the subject. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
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,...
|
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...
|
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,...
|
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...
|
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...
|
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
|
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,...
|
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...
|
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...
|
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...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
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...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
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,...
| |