const char* Wert übergeben



  • 1. Rechtsschreibfehler.
    2. Windows? Da hat send einen anderen Prototypen als POSIX spezifiziert. Aber ansonsten ist das nicht weiter tragisch, char* und void* passt.
    3. Und wie soll der Code aussehen, mit dem du deinen String übertragen hast? Und wie hast du ihn empfangen?
    4. Integer würde ich über hotl versenden und empfangen. Im Grunde wieder nichts anderes.



  • @Manni66
    Danke,ja ich meine Winsock. Ok Adressen gehen wohl. Jetzt kommt aber beim Server immer das gleiche Symbol "╠"

    Im Internet habe ich gelesen, dass es evtl. am fehlenden Nulldeterminator liegen kann.

    Wenn ich jedoch eine char wie folgt definiere:
    char a[] = {'A','\0'}
    kann ich mit &a nicht in der send() fkt nutzen. Gibt es einen anderen Weg den Null-determinator zu setzen? Ich glaube aber , dass es an was anderem liegt, der Nulldeterminator müsste doch automatisch gesetzt werden (z.B. beim integer).



  • pluxyy schrieb:

    Ok Adressen gehen wohl. Jetzt kommt aber beim Server immer das gleiche Symbol "╠"

    Nur?

    pluxyy schrieb:

    Im Internet habe ich gelesen, dass es evtl. am fehlenden Nulldeterminator liegen kann.

    "Überflogen" trifft's wohl eher. Du meinst den NUL-Terminator.

    Moment, also kommt das Symbol NACH dem String? Oder kommt nur das Symbol? Wenn letzteres, dann ließt du was nicht korrekt ein.

    pluxyy schrieb:

    Wenn ich jedoch eine char wie folgt definiere:
    char a[] = {'A','\0'}
    kann ich mit &a nicht in der send() fkt nutzen.

    ... was?

    pluxyy schrieb:

    Gibt es einen anderen Weg den Null-determinator zu setzen? Ich glaube aber , dass es an was anderem liegt, der Nulldeterminator müsste doch automatisch gesetzt werden (z.B. beim integer).

    Integer haben keinen NUL-Terminator. Und den Terminator kannst du ganz leicht selbst setzen, du hast schließlich die Länge der gelesenen Daten und (genug Speicher vorausgesetzt) noch ein Byte, um den Terminator zu schreiben.



  • Interessant.
    Bei integer wird "Nullterminator" automatisch gesetzt?
    Da habe ich wohl was verpasst.

    char a[] = {'A','\0'}; /* äquivalent ist char a[]="A"; */
    send( s, &a, sizeof a, 0); /* ist UB */
    

    C++-String mit c_str() ginge auch, aber dann mit size()+1 als Größenangabe.



  • Abgesehen davon, daß du nicht einmal einen halbwegs fehlerfreien Satz hinkriegst (vielleicht wäre Regalauffüller die vielversprechendere Berufsperspektive für dich?) braucht das keinen Nullterminator, mein kleiner Terminator, du.



  • pluxyy schrieb:

    @Manni66
    Danke,ja ich meine Winsock. Ok Adressen gehen wohl. Jetzt kommt aber beim Server immer das gleiche Symbol "╠"

    Nein, es kommen keine Zeichen sondern 4 Byte. Da du ein int reingesteckt hast musst du es auch genauso wieder lesen.



  • Nur?

    Ja, nur. Leider nichts anderes. Am Server kann es aber nicht liegen, da ich schon mit anderen Clients eine Kommunikation aufgebaut habe und der Server dann die empfangenen Daten richtig ausspuckt.

    Oder kommt nur das Symbol? Wenn letzteres, dann ließt du was nicht korrekt ein.

    Das befürchte ich auch. Nur leider habe ich keine Ahnung woran es liegen kann. Ich habe eure Beispiele (Manni66) 1:1 umgesetzt, bekomme aber dann die folgende Fehlermeldung (In diesem Fall kann ich natürlich auch nichts übertragen):

    Fehler: C2664: 'int send(SOCKET,const char *,int,int)' : cannot convert argument 2 from 'int *' to 'const char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Ich denke es muss an was richtig banalem liegen.



  • pluxyy schrieb:

    bekomme aber dann die folgende Fehlermeldung (In diesem Fall kann ich natürlich auch nichts übertragen):

    Fehler: C2664: 'int send(SOCKET,const char *,int,int)' : cannot convert argument 2 from 'int *' to 'const char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Ich denke es muss an was richtig banalem liegen.

    Wieviel mehr Hinweise willst du nnoch?
    Spoon feeding ist generell abgeschaltet.



  • pluxyy schrieb:

    Fehler: C2664: 'int send(SOCKET,const char *,int,int)' : cannot convert argument 2 from 'int *' to 'const char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Ich denke es muss an was richtig banalem liegen.

    Da steht doch exakt was das Problem ist und was du tun kannst: Die Funktion erwartet einen *const char ** aber du gibt ihr ein *int **. Der Compiler wandelt das aus gutem Grund nicht automatisch um, da es im allgemeinen sehr gefährlich sein kann Zeiger in andere Zeiger umzuwandeln ohne das zwischen den Typen ein definierter Zusammenhang besteht. Da muss man wissen was man tut (Ist bei dir offenbar nicht der Fall). Um den Compiler zu sagen "Ich will , dass du den "*int ** zu einem *const char ** machest, ich weiß was ich tue!" kannst du einen reinterpret_cast nehmen, wie dir bereits gesagt wurde, also

    reinterpret_cast<const char*>()
    


  • reinterpret_cast<const char*>()
    

    So ein krass hässliches Teil.



  • hg5th6h54 schrieb:

    reinterpret_cast<const char*>()
    

    So ein krass hässliches Teil.

    Das soll hässlich sein. Man soll es nämlich so weit wie möglich vermeiden.


Anmelden zum Antworten