codeanalyse



  • Hi!
    ich hab einen code vor mir den ich analysieren muss. ich glaub ich hab auch schon paar fehler gefunden, kann sie aber nicht genauzuordnen...
    folgende anweisung mit code:

    Enthält das folgende Programmstück
    - Syntaxfehler? Wenn ja, welche?
    - Semantische Fehler? Wenn ja, welche?
    - Laufzeitfehler? Wenn ja, welche?

    char s[20], *t;
    gets(s);
    gets(t);
    if (t = s)
    printf("Die beiden Zeichenketten sind gleich!");
    else
    printf("(%s) ungleich (%s)", s, &t[0]);
    

    if(t=s) ist falsch muss (t==s) heißen --> syntax?
    %s ist falsch muss %c heißen--> syntax?
    und
    zeichenketten kann man doch eh nur mit der funktion strcmp vergleichen oder?!--> syntax?!

    danke für eure hilfe!
    mfg



  • Die Annahmen == und strcmp() sind richtig. %c wäre falsch, da es nur ein Zeichen "printen" würde.

    Ansonsten:

    char s[20], *t; // t wird nicht initialisiert
    gets(s); // Aufruf von gets() ist immer ein Bug, da gets() nicht weiss wie groß der Buffer ist
    gets(t); // dito und nichtinitialisierter Zeiger (s.o.)
    


  • Syntaxfehler sehe ich beim ersten Überfliegen keine (auf deutsch: Das Programmfragment ist legaler C-Code - natürlich nur, wenn es im Inneren einer Funktion steht und du die <stdio.h> eingebunden hast.

    Semantische Fehler:

    • "t=s" ist eine Zuweisung und kein Vergleich
    • Stringvergleich funktioniert nicht mit ==, sondern mit strcmp()

    Laufzeitfehler:

    • gets() kann zu einem Speicher-Überlauf führen
    • t ist nicht initialisiert (-> SegFault/undefiniertes Verhalten)

    PS: Das Konstrukt "&t[0]" ist völlig legal - und äquivalent zu "t" 😉


Log in to reply