PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Simples C Problem


Gast
2005-09-13, 20:31:53
Hallo ich bin Anfänger in C und habe jetzt leider ein Problem das ich leider gar nicht verstehe.

Der Quelltext:


#include <stdio.h>

int main(void){

short z, s;

printf("z = ");
scanf("%d", &z);
printf("s = ");
scanf("%d", &s);
printf("z = %d | s = %d\n", z, s);

return 0;
}


Wenn mans dann kompiliert hat bekommt man folgende Ausgabe:

z = 3
s = 3
z = 0 | s = 3

Warum ist z = 0 mit den Datentypen char und short?
Mit int ist z = 3

P.S. Falls es wichtig ist: Ich habs mit gcc 4.0.1 kompiliert

Neomi
2005-09-13, 20:42:33
http://www.cplusplus.com/ref/cstdio/scanf.html

Vorgesehen ist nur int, nicht short. Wenn du etwas anderes übergibst, als verlangt wird, dann kannst du nicht davon ausgehen, daß es trotzdem funktioniert.

Gast
2005-09-13, 20:55:02
Thx für den Link jetzt läufts wie ich will =)

zeckensack
2005-09-13, 21:24:19
Genauer: scanf("%d",&s) schreibt vier Bytes an die Adresse von s. Da s nur zwei Byte groß ist, werden zwei Bytes zuviel geschrieben, und (Teile von) andere(n) Variablen überschrieben. In deinem Fall z, aber das ist vom Compiler abhängig.
Das war sogar noch Glück im Unglück. scanf hätte zB in einer tieferliegenden Funktion die Rücksprungadresse auf dem Stack verhunzen können.

Dieser Fehler gehört in die Kategorie "Buffer overflow".