Re: [maillist] gets/puts

Dr.Stephan Melin (stephan.melin@neuss.netsurf.de)
Tue, 4 May 1999 02:22:54 +0200

On Mon, 03 May 1999, you wrote:
>Am Die, 04 Mai 1999 schrieb Tim Hilden:=0D
>> Hallo ihr Programmierer,=0D
>> =0D
>> ich habe mir mal KDevelop und Rhide installiert um in meiner=0D
>> Freizeit mal was produktives zu machen. Wenn ich allerdings =0D
>> einen String eingebe m=F6chte benutzte ich als alter Dos Hase=0D
>> nat=FCrlich gets (variable). Beim Ausf=FChren bekomme ich die=0D
>> Meldung die gets Funktion w=E4re gef=E4hrlich. Wie soll ich dann=0D
>> aber ohne gets einen string einlesen und ausgeben?=0D
>> =0D
>> Danke im Vorraus, TIM=0D
>=0D
>Probiere doch mal die scanf("%i", &variable) Funktion f=FCr gets aus.=0D
>F=FCr puts kannst du printf("Text %i",variable) benutzen.=0D
>Anstelle von %i kannst du nat=FCrlich auch %s f=FCr String benutzen, ode=
r was es=0D
>sonst noch so gibt.=0D
>Printf hat noch viele M=F6glichkeiten.=0D
>Z.B. printf("Text \n") gibt den Text mit Zeilenumbruch aus.=0D
>--=0D
>Felix Gertz=0D
>I use windows on my car, on my house, but not on my computer.

ARRGH!
scanf ist aber genauso gef=E4hrlich! - Wenn nicht noch schlimmer!

Wenn es denn halbwegs sicher sein soll:
fgets

Sowohl scanf als auch gets leiden an der Tatsache, da=DF der einzulesende
"String" l=E4nger als das array sein kann:
rudiment=E4res Beispiel (nur C nicht C++):
=09
Definition des Feldes:
char mystring[ 10]; /* malloc w=E4re sch=F6ner btw. */
=2E..
Eingabe "String" etwas l=E4nger:
1234567890123456
gets( mystring) bzw. scanf("%s", mystring) schreiben nun lustig in mystri=
ng[11],=20
mystring[12], mystring[13] usw. genauers gesagt: sie f=FCllen den Speiche=
r bis zur
Addresse mystring + 16 (NULL Terminierung nicht vergessen!)
Das Problem mit scanf haben K&R schon in ihrer 1978er Ausgabe erw=E4hnt..=
=2E=20
(Grins! - Die liegt immer noch griffbereit in der N=E4he des Schreibtisch=
s, es
geht doch nichts =FCber die Klassiker...)

(BTW "mystring" und nicht "&mystring" wenn es um "char *" geht ...)

fgets ist aber "sicher":
fgets( mystring, 10, stdin) f=FCllt maximal 10 chars auf (maximal 9 mit =
Inhalt
und der letzte mit '\0')

Ansonsten: man fgets

Happy hacking

=09Stephan

--
Dr. Stephan Melin
EMail: stephan.melin@neuss.netsurf.de