memcmp



  • Ich würde gerne in einer if-Anweisung mit der Funktion memcmp zwei char Arrays vergleichen. Wenn die Arrays gleich sind, soll das Programm weiter machen.

    Das Problem ist, bei mir arbeitet das memcmp irgendwie nicht richtig. Wenn arrays gleich sind, werden die nicht als gleich erkannt und zwei völlig verschiedene Arrays erkennt er dann als gleich an.

    Die Anweiung sieht bei mir so aus:

    if(memcmp((char *)idxp.P_Name, (char *)p, sizeof(idxp.P_Name)) == 1)
    

    idxp.P_Name ist aus einer globalen Struktur und p wird lokal in einer Funktion eingelesen. Beide Arrays haben die Länge [20]. Ich hab auch versucht die Setien zu tauschen und ein anderes sizeof anzugeben und ich habs mit und ohne (char 😉 versucht. Aber egal, das memcmp produziert irgendwie nur Müll. Was mach ich falsch?



  • 1. man: memcmp gibt 0 zurück, wenn die Bereiche gleich sind
    2. die Parameter sollten const void* sein
    3. versuch' mal, als Größenangabe 20 anzugeben (was genau ist der Typ der verglichenen Variablen?)

    PS: Da du offenbar char*'s vergleichen willst, empfehle ich lieber strcmp() oder strncmp().



  • ok, danke

    Ich hab Punkt 1 versucht, das geht. Die 0 war dir Lösung. Ich hatte das mit 1 gemacht weil ich das glaub ich irgendwo so gelesen hatte. Naja, entweder falsche Angabe oder falsch gelesen. Auf jeden fall danke für die Hilfe.

    Was wären die Vorteiel von strcmp() oder strncmp() gegenüber memcmp?



  • Bei strcmp() bzw. strncmp() werden Strings verglichen. Was machst du mit memcmp() wenn die Strings kürzer sind, als die Länge die du memcmp() übergibst? Du vergleichst irgendwelche Daten in denen alles mögliche drinstehen kann und das Ergebnis wird eventuell nicht 0 sein, obwohl beide Strings identisch sind.


Anmelden zum Antworten