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#


  • Mod

    &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.


Anmelden zum Antworten