zeichenketten werden in c immer mit einem abschliessenden 0x00 =
versehen. das
siehst du recht sch=F6n, da du ja 8 zeichen ausgibst. wenn du =
irgendeine
stringfunktion verwendest, bearbeitet diese strings immer nur bis zum =
0x00.
> zeigt, da=DF tats=E4chlich zwei Byte reingelegt werden.
> x[2] sind tats=E4chlich zwei Byte: x[0] und x[1];
> x[2] ist out of range.
> Ein strcpy(string,'n'); gibt beim Compilieren Warning und=20
> beim Ausf=FChren
> coredump.
> was ist da verkehrt?
ein string ist in c ein pointer auf chars. wenn du strcpy ein 'n' =
=FCbergibst,
interpretiert dies der compiler als adresse char('n'), diese liegt aber
irgendwo. der compiler macht dich aber auf diesen misstand aufmerksam
(warning). wenn du das dann startest kann es zu 3 m=F6glichen f=E4llen =
kommen:
- die adresse 'n' ist irgendwo im protected speicher des =
betriebssystems -
coredump
- die adresse ist irgendwie g=FCltig und er f=E4ngt an zum kopieren. =
wenn er
keine 0 finded =FCberschreibt er mal was wichtiges - coredump
- die adresse ist g=FCltig und es kommt auch innerhalb der 8 bytes die
alloziert sind mal eine 0. dann steht ein m=FCll im string.
hth, roland
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Roland Aigner - Skidata Austria |
| airo at skidata dot com |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please keep your hands off the secretary's reproducing equipment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~