Re: strcat unter FreeBSD

From: J Wunsch <j(at)uriah.heep.sax.de>
Date: Fri, 30 Jul 1999 09:13:00 +0200

As Klaus Herrmann wrote:

> > char *s = "Hello";
> >
> > Das ist eine Stringkonstante.

> warum?

Per Definition (des C-Standards).

> das ist doch ein pointer to char, kein const char*? Ich denke,
> den müsste ich schreiben können.

Nein. Daß der C-Compiler Dir das Ding überhaupt als non-const pointer
to char durchgehen läßt, ist schon fast ein Bug (und eigentlich nur
dafür da, weil man sonst eine große Menge schlampig geschriebener
C-Programme wohl neu schreiben müßte). Wenn Du Dir angewöhnst,
Zeiger, die auf konstante Strings zeigen, grundsätzlich als `const
char *' zu deklarieren, bist Du natürlich auf der sicheren Seite.

> > Die koennte der Compiler
> > im Textsegment ablegen, wenn er wollte - und das ist
> > Read-Only.

> hmm, merkwürdig, davon hab ich noch in keinem buch was gesehen.

Es ist aber in allen heutigen Unixen gängig. Nicht nur im von
Christian zitierten ELF-Format, das dafür gleich eine eigene section
im Objektfile parat hat, sondern auch früher schon, da wurden sie halt
nur im Textsegment abgelegt (wo vor allem der Programmcode steht).
Neben dem r/o-Status hat das gleich noch den Vorteil, daß alle
konstanten Zeichenketten zwischen mehreren gleichzeitig laufenden
Instanzen eines Programmes `shared' sind.

-- 
cheers, J"org
joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 30 Jul 1999 - 09:19:25 CEST

search this site