Funktion statt char* string übergeben



  • jep...wusste garnicht dass die socket api dazu gehört, hab mich bisher immer erfolgreich davor gedrückt die winapi zu benutzen^^

    aber wenn man das so sieht weis man, dass die winapi dochs chon ausgedient hat..



  • Aber doch nicht deshalb ...



  • Übrigens ist der Socket-Teil ohne große Änderungen so auch in Linux nutzbar.



  • Aber nur der ohne WSA vornedran.

    Und Bashars Code hat nichts mit C-Strings zu tun, recv empfängt auch Binärdaten (oder kann man sich dagegen wehren?) - also sollte man im Vektor lieber Platz für 257 Elemente schaffen und das letzte auf 0 setzen, wenn man "string s = &vec[0]" schreibt. Ansonsten kann's böse Überraschungen geben, falls keine 0 empfangen wurde.

    (Eigentlich kann man hier statt eines vectors auch einfach ein statisches Array nehmen, zumindest spricht IMHO keiner der üblichen Gründe dagegen...?)



  • Bashar schrieb:

    Aber doch nicht deshalb ...

    aber unter andrem deshalb :p
    dies ist das typische problem: man arbeitet durchgehend mit der stl, und wird plötzlich mit nem char array konfrontiert,ich meine der c++ programmierer von heute ist darauf nicht vorbereitet, in solchen situationen folgt immer das typische verhalten des programmieres: er verkriecht sich auf irgendeinen schrank, und hofft, dass microsoft in den nächsten 20 minuten kapituliert, damit man endlich für ein gescheites betriebssystem programmieren kann 🙄



  • Hast du mal dran gedacht, dass es noch andere Sprachen ausser C++ gibt? C ist der kleinste gemeinsame Nenner, auf eine solche API kann man auch mit Ada oder sonstwas zugreifen. Wenn sie in C++ wär, müsste man für alle anderen Sprachen mehr oder weniger dicke (und unperformante) Wrapper bauen.



  • Das Problem liegt für mich eher in der string-Klasse, dass die die Möglichkeit für z.B. recv nicht anbietet.



  • dafür gibts aber keine möglichkeit das anständig zu handlen.
    ein string is nunmal kein char array, der speicher ist nich an einem stück, sodass man möglichkeiten wie charpointer übergeben vergessen kann,und viel mehr möglichkeiten gibt es nicht.

    und wenn mans aus diesem blickwinkel betrachtet, sollte recv dann ne überladung für strings anbieten...



  • Tja, wieso denn kein operator char*() für string?



  • Weil das die Kapselung aufbricht. string ist eine Zeichenkette, kein besseres char-Array. Wenn du sowas brauchst, solltest du es zb mit vector<char> versuchen.


Anmelden zum Antworten