C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: string als char* übergeben?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Martin Winkler
Guest





PostPosted: Sun Sep 26, 2004 1:50 pm    Post subject: Re: string als char* übergeben? Reply with quote



Andreas Volz wrote:
Quote:
Hi,

ich hab oft das Problem in C++ Programmen C-Funktionen nutzen zu wollen.
Wenigstens hab ich mir mittlerweile abgewöhnt auch in C++ nur char* zu
nutzen, aber jetzt stehe ich vor dem Problem ständig char* zum
zwischenspeichern nehmen zu müssen, wenn ich eine C-Funktion aufrufe.
Als Beispiel unter die Funktion "func". Diese erwartet einen char* str
und will etwas daran ändern. Irgendwie kam ich auf die Idee das unten
mal zu testen. Es "funktioniert" auch, aber Valgrind sagt:
"Speicherzugriffsfehler", was man wohl nicht leichtfertig ignorieren
sollte. Ist das also nicht erlaubt?

Richtig. Den Pointer, den dir std::string::c_str() liefert, darfst du
nur lesend benutzen. Der Buffer gehört nicht dir, sondern dem std::string.

Quote:
Und wie mache ich das am besten,
wenn ich func nicht ändern kann? Gibt es keinen anderen Weg, als ein
char* zu nehmen, mit new Platz zu reservieren und es nach dem
Funktionsaufruf dem string zuzuweisen und wieder mit delete zu
entfernen?

Das ist dann der einzig saubere Weg, wenn du solche C-Funktionen
benutzen mußt.

Gruß
Martin

--
http://www.jumli.de
http://www.jumlidev.de/forum/

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tobias Güntner
Guest





PostPosted: Sun Sep 26, 2004 4:31 pm    Post subject: Re: string als char* übergeben? Reply with quote



Andreas Volz wrote:
Quote:
ich hab oft das Problem in C++ Programmen C-Funktionen nutzen zu wollen.
Wenigstens hab ich mir mittlerweile abgewöhnt auch in C++ nur char* zu
nutzen, aber jetzt stehe ich vor dem Problem ständig char* zum
zwischenspeichern nehmen zu müssen, wenn ich eine C-Funktion aufrufe.

Probier's mit vector:

void func(char *str)
{
strcpy(str, "456");
}

vector<char> a(100);
func(&a[0]);
string s(a.begin(), a.end());
cout << s;
--
Regards,
Tobias

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Torsten Robitzki
Guest





PostPosted: Sun Sep 26, 2004 9:12 pm    Post subject: Re: string als char* übergeben? Reply with quote



Andreas Volz wrote:
Quote:
Hi,

snip


Quote:
Gibt es keinen anderen Weg, als ein
char* zu nehmen, mit new Platz zu reservieren und es nach dem
Funktionsaufruf dem string zuzuweisen und wieder mit delete zu
entfernen?

using namespace std;

void func (char *str)
{
strcpy (str, "456");
}

int main (int argc, char **argv)
{
string a ("123");
std::vector<char> buf(a.begin(), a.end());

cout << a;

func (&var[0]);

cout << a << endl;

return 0;
}

mfg Torsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Babak Pourat
Guest





PostPosted: Mon Sep 27, 2004 7:53 am    Post subject: Re: string als char* 374bergeben?n^ Reply with quote

Martin Winkler wrote:
Quote:
Und wie mache ich das am besten,
wenn ich func nicht ändern kann? Gibt es keinen anderen Weg, als ein
char* zu nehmen, mit new Platz zu reservieren und es nach dem
Funktionsaufruf dem string zuzuweisen und wieder mit delete zu
entfernen?

Das ist dann der einzig saubere Weg, wenn du solche C-Funktionen
benutzen mußt.

Man kann statt char* (mit new und delete) zu nehmen auch std::vector<char>
benutzen. hat alle Vorleile die man vom vector gewohnt ist. Zur übergabe an
die C-Funktion benutzt man die adresse des ersten Elements.

Also in deinem Beispiel:

#include<vector>
#include<string>

using namespace std;

void func (char *str)
{
strcpy (str, "456");
}

int main (int argc, char **argv)
{
string a ("123");
cout << a;

vector a.copy(&b[0],a.size());

func (&b[0]);

a = &b[0];

cout << a << endl;

return 0;
}

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Nicolas Pavlidis
Guest





PostPosted: Mon Sep 27, 2004 9:16 am    Post subject: Re: string als char* übergeben? Reply with quote

Andreas Volz <usenet-spam-trap (AT) brachttal (DOT) net> writes:

Quote:
Hi,

ich hab oft das Problem in C++ Programmen C-Funktionen nutzen zu
wollen.

Nur interesse halber:
Warum willst du nur C - Functionen nutzen?
std::string kann mehr und ist auch sicherer was Pointerfehler und
soweiter angeht. Versteh mich nicht falsch ich will hier nicht an
deinem Koennen zweifeln, nur es passiert IMHO nix schneller als ein
Pointerfehler oder ein vergessenes '' am Ende eines C - Strings.

LG
Nicolas
--
Quote:
Nicolas Pavlidis | Elvis Presly: | |__ |
Student of SE & KM | "Into the goto" | |__| |
[email]pavnic (AT) sbox (DOT) tugraz.at[/email] | ICQ #320057056 | |
-------------------University of Technology, Graz----------------|

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.