Re: C: Newline entfernen

From: Bernd Walter <ticso(at)cicely5.cicely.de>
Date: Sun, 28 Apr 2002 17:38:06 +0200

On Sun, Apr 28, 2002 at 04:33:04PM +0200, Stefan Jahn wrote:
> Hallo,
>
> höchstwahrscheinlich bin ich hier nicht richtig ...
>
> Probiere gerade ein Programm in C zu schreiben. Folgendes Problem: Ich
> habe einen String der am Ende ein Newline (\n) hat. Wie kann ich diesen
> Newline vom String entfernen?
>
> Folgendes hab ich probiert (text ist "Test\n"):
>
> text_neu=strncpy(text_neu,text,strlen(text)-2);
>
> Das funktioniert so weit auch, blos weiß C jetzt nicht mehr wie lange
> der String text_neu ist. Überschreibe ich diese Variabel im nächsten
> Schritt mit einem kürzeren Text, so wird mir immer noch der Rest vom
> alten Text angezeigt.

strncpy kopiert den Quellstring bis maximal len Bytes.
Allerdings ist dein Quellstring größer als len und er kopiert das
'\0' nicht mehr mit, weils halt nicht mehr reinpasst.
Steht aber auch in der strncpy(3) Manpage.
Du wirst entweder strlcpy benutzen wollen, welches *immer* mit
'\0' abschliesst, oder, wenn du es nicht kopieren musst, einfach direkt
im Quellstring kürzen:
if (src[0] != '\0') src[strlen(src) - 1] = '\0';

Abschliessend muss man noch sagen, das strlcpy nicht überall verfügbar
ist.

> P.S.: Stringfunktionen hat ja C ja nicht gerade besonders viele, da
> konnte ja Pascal mehr ... ;-)

Vergleiche nicht zu früh :)
C Strings erfordern zwar einiges an Disziplin, aber sind im Ergebniss
oftmals schneller, da man den komplexen Ballast nicht mitschleppt.
Man muss sich nur daran gewöhnen.
Für die anderen gibt es C++...

-- 
B.Walter              COSMO-Project         http://www.cosmo-project.de
ticso(at)cicely.de         Usergroup           info(at)cosmo-project.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sun 28 Apr 2002 - 17:38:21 CEST

search this site