RE: [maillist] C++ Problem

AIR (AIRO@skidata.com)
Fri, 20 Aug 1999 09:39:24 +0200

> ich gebs zu, unter C hab ich mit 'diesen' Zeichen nichts gemacht - =
ich
> habs eben mal probiert, es geht so ned.
> das folgende Programm
> <---------
> u_char string[8];
> u_char x =3D 0;
>=20
> for (x=3D0;x<8;x++) {
> string[x] =3D 0xcc;
> }
> strcpy(string,"n");
> for (x=3D0;x<8;x++) {
> printf ("0x%02x ",string[x]);
> }
> ------>
> mit dem ergebnis:
> tmp> a.out
> 0x6e 0x00 0xcc 0xcc 0xcc 0xcc 0xcc 0xcc=20

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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~