Rückgabewert vom memcmp



  • Hi(gh)!

    Und weiter geht es mit dem "Erlenkötter"... mittlerweile bin ich beim Kapitel 9 (Arrays analysieren) angekommen und wundere mich über die Ausgabe:

    char text1[]="2002";
    char text2[]="2003";
    
    vgl = memcmp(text1, text2, sizeof(text1));
    if (vgl == 0)
      printf("\n'text1' gleich 'text2'.");
    else 
      printf("\n'text1' - 'text2': %i.", vgl);
    

    Laut Buch sollte der Rückgabewert der Differenz zwischen den ASCII-Codewerten des jeweils vierten Zeichens in den Arrays entsprechen, also -1... tatsächlich bekomme ich -256 (und wenn ich "2003" in "2004" ändere sogar -512!). Wurde in C11 gegenüber C99 (ich vermute mal, mein gcc unterstützt schon C11) die Funktion memcmp geändert?

    Bis bald im Khyberspace!

    Yadgar


  • Mod

    Das ist einfach nur Unsinn, diese Aussage. memcmp gibt einfach nur kleiner, großer oder gleich Null zurück - egal in welcher Version des Standards. Um mehr darein zu interpretieren müsste man den Algorithmus kennen, dieser ist aber nicht fest vorgegeben. Manche Implementierungen sind vielleicht so freundlich, die genaue Differenz wiederzugeben, dann muss dies aber für diese Implementierung speziell dokumentiert werden. Diese Art der Implementierung ist aber weniger optimiert als die Varianten, die nur das nötigste tun.



  • Dieser Erlenkötter scheint ja ein echtes Multitalent zu sein, wenn man sich seine weiteren Bücher so ansieht. Neben "C - Programmieren von Anfang an" hat er auch noch "Java - Programmieren von Anfang an" sowie "C++ - Objektorientiertes Programmieren von Anfang an" veröffentlicht. Ein XML-Spezialist scheint er auch noch zu sein, schließlich hat er ein Buch "XML - Extensible Markup Language von Anfang an" geschrieben.

    Wow. Ich sehe grad, dass er auch noch C# und die Erstellung "flexibler Webseiten" von Anfang an beschreibt. Und das alles innerhalb weniger Jahre. Wirklich beeindruckend.



  • Siehe manpage: memcmp(3)



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum C (C89 und C99) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


Log in to reply