string aus string.h in char * umwandeln
-
hi,
ich einem Programm von mir muss ich mit der Funktion recv() Daten empfangen.
Als zweiten Parameter erwartet diese Funktion anscheinen einen char *.
Da ich allerdings mit strings aus string.h arbeite um Buffer-Overflows zu vermeiden, habe ich nun ein Problem in der Konvertierung von diesem string.
string.c_str() funktioniert leider nicht, habe es schon ausprobiert.
Hab auch schon gegoogelt, aber bekomme nur Trash.
habt ihr ne Lösung für das Problem?schon im voraus vielen Dank für eure Antworten
mfg
#pointer#
-
&s[0] - sorg vorher per resize() daafür, dass genug platz da ist.
-
wie meinst du genau?
-
Du sollst den Zeiger auf das erste Element des Strings (&s[0]) an die Funktion übergeben und vorher per s.resize (bla) dafür sorgen, dass genug Platz da ist.
Mit c_str() funktioniert es nicht, weil c_str einen const char* zurückliefert.
Du könntest zwar versuchen, das const wegzucasten, aber ich glaube nicht, dass das in deinem Sinn ist.
-
#pointer# schrieb:
ich einem Programm von mir muss ich mit der Funktion recv() Daten empfangen.
Als zweiten Parameter erwartet diese Funktion anscheinen einen char *.Du hast da was falsch verstanden. recv erwartet zwar einen char* Parameter, dies bedeutet aber nicht automatisch String. Und C-String schon gar nicht. char* ist erstmal ein simples Byte Array, du kannst also genauso gut mit std::vector<char> oder boost::array<char, N> arbeiten.
-
ok, vielen Dank für die Antworten.
also soll das in etwas so aussehen:
... string.resize(sizeof(string)); rc=recv(s,&string[0],groeße,0); ...stimmt des so ???
-
#pointer# schrieb:
string.resize(sizeof(string));Das is ziemlich sinnlos. Du "vergrößerst" den Platz für Zeichen auf die Größe des String-Objektes. Du solltest wissen, wie groß der String, der von recv kommt maximal sein kann und auf diese Größe vergrößern.
Außerdem is ß wohl kaum erlaubt
-
ok, also:
string.resize(200);?
stimmt das wenigstens?
rc=recv(s,&string[0],groesse,0);
-
Warum nicht einfach: "str.resize(groesse);"? Wenn ich das richtig in Erinnerung habe, dürfte das die Menge sein, die du im nächsten Schritt anfordern willst.