Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » \n ignorieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.02.2004, 16:06 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Wenn ich mit fgets einen string einlese, wird das \n Zeichen immer mit gespeichert.
Ist folgendes erlaubt?

C++:
void removenline(char *str)
{  
   if(str[strlen(str)-1] == '\n')
      str[strlen(str)-1] = '\0';  
}


Kann es da zu Fehlern kommen?

Danke im Voraus!!!
mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.02.2004, 16:19 Uhr
virtual
Sexiest Bit alive
(Operator)


Selbstverständlich kann es zu Fehlern kommen :
1. Was ist, wenn str==NULL?
2. Was ist, wenn strlen(str)==0?
In beiden Fällen würde ich einen Absturz des programms nicht immer ausschliessen.
Alternative:

C++:
void removenl(char* str)
{
    size_t len = str? strlen(str):0;
    if (len>0 && str[len-1]=='\n') str[len-1] = 0;
}




Bearbeitung von loddab:

?:-Operator korrigiert


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 01.03.2004 um 12:16 Uhr von loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.02.2004, 16:49 Uhr
mike
Pinguinhüpfer
(Operator)



An das hab ich gar nicht gedacht

Danke!!!
mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.03.2004, 09:30 Uhr
KaraHead



size_t ist doch so weit ich weiss, das selbe wie unsingned int, nicht oder???
@windalf
Warum benutzt du da jetzt size_t und nicht unsingned int???

Oder ist size_t nur für strings geeignet??

Fragen über Fragen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.03.2004, 12:00 Uhr
virtual
Sexiest Bit alive
(Operator)


@KaraHead
Meinst Du mich?
Wenn ja: Ich benutze size_t weil es nun mal der Standard typ für Längen ist. Es kann unsigned sein, kann aber auch unsigned long sein.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.03.2004, 13:03 Uhr
KaraHead



Oh ja sorry war in Eile und hab nicht so sehr auf den Namen geguckt.

Genau meine Frage: Warum ist es Standard wenn es das Selbe wie unsigned int ist??? Oder ist das nur aus bequemlichkeitsgründen um nicht unsigned zu schreiben???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.03.2004, 13:27 Uhr
virtual
Sexiest Bit alive
(Operator)


Lese duc bitte Post 004 genau: size_t kann, muß aber nicht unsigned sein. Es kann auch unsigned long sein, was auf manchen Systemen ein gewaltiger Unterschied ist. Denkbar wäre ein System, wo gilt:

unsigned => 32 Bit
unsigned long => 64 Bit
size_t => unsigned long

oder auch ein System, was zwar 64 Bittig rechnet, aber nur 32 Bittig addressieren kann, also

unsigned => 32 Bit
unsigned long => 64 Bit
size_t => unsigned
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.03.2004, 13:45 Uhr
RHBaum




Zitat:

Warum benutzt du da jetzt size_t und nicht unsingned int???


Sinn solcher getypten Datentypen ist es, den compiler bestimmen zu lassen, welchen wirklichen datentyp am besten fuer was geeignet ist.

size_t => vorzeichenloser integer der fuer zaehlungen geeignet ist.

damit so iterationen und operationen mit solchen zaehlern recht flott gehen, nimmt er nicht den kleinsten datentyp, sondern den, mit dem es am schnellsten geht. Und das ist bekanntlich der datentyp, der in nen Register des Prozessors am besten passt und was das BS am besten unterstuetzt.

16 bit auf 32 bit prozessor / BS = zusaetzliche Arbeitsschritte zum fuellen der Register.
64 auf 32 bit = alle rechenoperationen mit mehr aufwand, weil es nicht mit einem registerdurchlauf geht.

also unter 16 bit BS wird size_t nen unsigned 16 bit integer sein, unter 32bit BS nen unsigned 32 bit ... etc.

Fuer dich bedeutet das, dass deinen code, wenn er ansi compatibel ist, ohne problebe auf nen 64 bit alpha prozesser (und dessen compiler) portieren koenntest, und dein size_t trotzdem optimal laeuft ....

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.03.2004, 15:01 Uhr
KaraHead



aha jetzt hab ich es, thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: