linux-l: GCC Frage

Robert C. Helling helling at aei-potsdam.mpg.de
Fr Mär 5 16:58:43 CET 1999


On Fri, 5 Mar 1999, Volker Mueller wrote:

> On Fri, 5 Mar 1999, Netbandit at Infoship wrote:
> 
> >1.) in meinem Buch steht, wenn ich einem String (oder char array) zuweisen will
> >kann ich es so z.B. machen:
> >
> >char text[80];
> >text = "Hallo Welt!";
> 
> Wie Du oben schon schreibst, legst Du mit
> char text[80];
> ein Array an, auf das der Zeiger "&text[0]" oder die Kurzform mit identischer
> Bedeutung "text" zeigt. Einem Zeiger kannst Du aber keine Zeichenkette zu-
> ordnen. Dafuer gibz die Fkt. strcpy (3) (bzw. strncpy (3)). Die korrekte
> Loesung findest Du am Ende dieser Mail.
> 

Nein, das ist nicht das Problem. "Hallo Welt" hat naemlich den Typ Pointer
auf char. Es wird im bss Segment diese Stringkonstante abgelegt und dann
der Pointer uebergeben. Das Problem ist nur, das fuer ANSI C ein
Unterschied zwischen (char *) und (char[80]) gemacht wird. Deshalb
brauchts nen type cast oder noch besser, gleich text richtig deklarieren:

char *text;
text = "Hello world!";

liefert keine Fehlermeldung. Ausserdem werden nicht die 80 byte fuer den
urspruenglichen Ort von text verschwendet.

Uebrigens hatte das zweite Beispiel mit dem scanf auch noch einen 'nahezu
Bug': zur Ausgabe von text wurde

printf(text);

anstelle von

printf("%s",text);     oder write(text);

verwendet. Das geht zwar meist gut aber eben nur meist, da der
Formatstring von printf interpretiert wird. 

netbandit: Ich muss zugeben, dass ich das mit Trenner von scanf in der
pmail uebersehen hatte. Dieses 'feature' von scanf hat mich schon mehrmals
ziemlich genervt. Man sollte wohl eher gets(STDIN) verwenden... Oder
gleich fuer Sachen, die nicht gaenzlich triviale Stringmanipulationen
machen auf sowas wie Perl zurueckgreifen. C ist dafuer einfach nicht
gemacht.

Robert

-- 
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO
Robert C. Helling        Albert Einstein Institut Potsdam
                         Max Planck Institute For Gravitational Physics
print "Just another      Fon +49 331 275 37 60 Fax +49 331 275 37 99      
       stupid .sig\n";	 http://www.aei-potsdam.mpg.de/~helling



Mehr Informationen über die Mailingliste linux-l