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"