Return Frage



  • // main
    ...
    char buffer[6000];
    ...
    ...
    buffer = check_errors(..,..,..,);

    In der Header Datei in der check_errors deklariert ist
    ...
    ...
    char buffer[6000];
    recv ( socket, buffer, 5999, 0);
    return buffer;

    g++ meckert mit:

    In file included from main.cpp:8:
    headers/test.h: In function »bool xss_test(int, std::string, std::string, std::string)«:
    headers/test.h:30: Fehler: unverträgliche Typen in Zuweisung von »std::string« an »char [6000]«

    Sind doch beide char array Variablen?



  • Interessant ist nicht die Implementierung von check_errors, sondern die Deklaration. Was hat die Impl. überhaupt in dem Header zu suchen?

    Was mir noch aufgefallen ist, wieso ist dein Buffer 6000 Zeichen groß, du schreibst aber nur 5999 rein?



  • Wie müsste ich die Funktion denn richtig deklarieren?

    string check_errors(....)
    So wäre das jetzt definiert



  • Da hast du doch deinen String. Du könntest jetzt string s = check_errors(...) beim Aufruf schreiben.



  • Ja ich weiß.
    Aber es muss ein char buffer[] sein, denn er wird später in dieser Form weiterverwendet....



  • Wieso schleust du das ganze dann in einem String durch die Gegend?

    Die übliche Vorgehensweise wäre so ungefähr:

    char buffer[6000];
    check_errors(buffer, ...);
    ...
    void check_errors(char buffer[], ...) {
      recv ( socket, buffer, 6000, 0);
    }
    

    Da sind noch viele Fragen ungeklärt, nur mal als Beispiel

    • sollte der Rückgabewert von check_errors einen Fehlercode beinhalten? Was passiert, wenn recv fehlschlägt?
    • wieso heißt die Funktion check_errors, mach aber was ganz anderes?
    • Wieso gerade 6000? Was passiert z.B., wenn die empfangene Nachricht länger ist?


  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Administrator

    returnfrage schrieb:

    g++ meckert mit:

    In file included from main.cpp:8:
    headers/test.h: In function »bool xss_test(int, std::string, std::string, std::string)«:
    headers/test.h:30: Fehler: unverträgliche Typen in Zuweisung von »std::string« an »char [6000]«

    Sind doch beide char array Variablen?

    Ehm, nein! std::string ist eine Klasse und kann man nicht einfach so in ein char-Array konvertieren.
    std::string Referenz: http://www.cplusplus.com/reference/string/

    Es gibt möglichkeiten an das Array von std::string ranzukommen, mit einer einfachen Zuweisung wirst du aber keine Kopie erreichen können. Da wirst du schon eher etwas mit std::copy machen müssen. Z.B:

    #include <string>
    #include <algorithm>
    
    // ...
    
    std::string myString; // der String mit den Daten gefüllt.
    char buffer[6000]; // Ziel buffer
    
    if(myString.length() <= 6000)
    { std::copy(myString.begin(), myString.end(), &buffer[0]); }
    else
    {
      // Fehler!
    }
    

    Man fragt sich aber schon ein wenig, ob das sinnvoll ist und die Fragen von Bashar würde ich auch im Raum noch stehen lassen. Zudem wäre es eine Überlegung wert, ob du nicht lieber ein std::vector anstatt std::string nehmen solltest und ein std::tr1::array statt des char buffer[6000] .

    Grüssli


Anmelden zum Antworten