Wie char-array kopieren und vergleichen?

  • Hallo zusammen,

    komme mit einem char-array Problem nicht weiter - eigentlich ist auch eher C++ meine Welt:


    String msg wird über die callback-Funktion (MQTT) folgendermaßen gefüllt:

    Code
    char msg[length+1];
    
    for (int i = 0; i < length; i++) {
    
    msg[i] = (char)payload[i];
    
    }
    
    msg[length] = '\0';

    Jetzt würde ich gerne msg nach oldmsg kopieren und später die Inhalte so vergleichen:


    Code
    if (strcmp(msg,oldmsg)==0)

    Wie kann ich das bewerkstelligen und wie muss ich oldmsg definieren da msg unterschiedlich lang ist?

    Kann mir da jemand weiter helfen? Die Füllung und Definition von msg muss so bleiben.


    Danke

  • Wenn C++ deine welt ist, dann benutz doch std::vector<char> und std::copy, und dann vergleicht sich auch per ==-Operator. Sollte zumindest.

  • Doch, tut es. Und das payload und length kannst du problemlos mit dem dazu äquivalenten Vector konstrukor in einen solchen konvertieren. Der nimmt einen Pointer und eine Länge. Wie immer ist cpp reference dein Freund.

  • std::vector<byte> p(payload, length);


    fällt nicht wirklich unter “heftig” 🤓

  • Wie immer und wie in der Doku angegeben: <vector>

  • Mit vector brauchst du das memcpy nicht. Das ist (einer) der Gründe den zu nehmen. Auch memcmp braucht man dann nicht. Das ist halt C++ statt C.

  • Woher kommst du denn auf das Brett, der arduino würde irgendwas anders machen als ein anderer Compiler? Da steckt der ganz normale GCC bzw G++ hinter. Und das gehört zur Standard Bibliothek. Genauso wenig wären dann zwingend memcpy & Co an Bord. Das sind auch nichts anderes als Standardbibliotheksfunktionen.