 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Martin Winkler Guest
|
Posted: Sun Sep 26, 2004 1:50 pm Post subject: Re: string als char* übergeben? |
|
|
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
|
Posted: Sun Sep 26, 2004 4:31 pm Post subject: Re: string als char* übergeben? |
|
|
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
|
Posted: Sun Sep 26, 2004 9:12 pm Post subject: Re: string als char* übergeben? |
|
|
Andreas Volz wrote:
| 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
|
Posted: Mon Sep 27, 2004 7:53 am Post subject: Re: string als char* 374bergeben?n^ |
|
|
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 | | |