mam & str



  • kann mir einer den unterschied zwischen memcmp und strcmp erklären?

    wenn ich mir die reference ansehe sind für mich beide im prinzip das gleiche..

    ausser, dass ich bei mem die größe noch dazu angebe...

    kann es sein das ich strcmp nur bei einzel wörtern verwende und mem bei längeren strings? 😕

    gz



  • C-Strings werden mit einem '\0' terminiert. strcmp vergleicht also die beiden Strings bis zum '\0' (auch wenn die Puffer in den die Strings stehen größer sind), memcpy hingegen vergleicht n Bytes.



  • also:

    strcomp vergleicht zwei arrays egal ob sie unterschiedlich gross sind bis zum terminirungszeichen '\0'. und gibt immer 0 aus wenn gleich.

    memcmp vergleicht auch zwei arrays unterschiedlicher grösse nur mit dem unterschied das er bei '\0' nicht stopt sondern weiter macht.

    richtig verstanden?



  • ja.

    strcmp sollte man nur mit C-Strings verwenden, memcmp sollte man verwenden, wenn man 2 beliegibe Datenblöcken vergleichen will.



  • strcmp vergleich C-Strings (char arrays mit '\0'-Terminierung).
    memcpy vergleich zwei Speicherblöcke. Das mag zwar gleich aussehen, ist es aber nicht.

    #include <stdio.h>
    #include <stdlib.h>
    #include <memory.h>
    
    typedef struct
    {
        char a[20];
        float b;
        double c;
    } my_type;
    
    int main()
    {
        my_type a[50];
        my_type b[50];
    
        //wie mit strcmp????
        memcmp(a, b, 50 * sizeof(my_type));
    
        return 0;
    }
    


  • achso mit strcmp kann ich nur char arrays vergleichen. auch wenn im array der string 2 mal vorhanden ist ➡ 2 mal wird 0 ausgegeben.
    ist jedaoch auf char arrays begrenzt.

    memcmp funzt auch bei char arrays aber auch bei arrays anderer werte (nicht char).



  • gleich schrieb:

    achso mit strcmp kann ich nur char arrays vergleichen. auch wenn im array der string 2 mal vorhanden ist ➡ 2 mal wird 0 ausgegeben.

    nein. 1 oder -1 wird ausgegeben.

    gleich schrieb:

    memcmp funzt auch bei char arrays aber auch bei arrays anderer werte (nicht char).

    das ist korrekt.



  • also heisst das wenn ich 2 char arrays habe:

    char[50]= {"hallo du und du"};
    char[10]= {"du"};
    

    müsste ich das erste array "zerlegen" um mit strcmp 2 mal 0 zu bekommen da er sonst das ganze array sieht und sagt das im 50er mehr drinn is.

    wobei ich im bei memcmp die zerlegung "range" ja schon mitgebe über zb. länge char[10].



  • Wenn Du subsrings vergleichen willst bzw. einzelne Wörter finden willst, musst Du es sowohl für memcmp als auch für strcmp zerlegen.
    Man munkelt übrigens, das Ausprobieren neue Erkenntnisse bringen soll.



  • @tachyon: ich hab noch nie etwas auf gerüchte gegeben...
    aber danke ist mir bekannt.

    habs jetzt schon so ca. in der birne danke leutz!



  • für mehrerer strings finden geht auch strtok, oder die lösung von fuzzy+
    gruss
    jyeah


Anmelden zum Antworten