Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string-parser

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
13.09.2003, 18:21 Uhr
kronos
Quotenfisch
(Operator)


bei mir setzt's grad wieder völlig aus...
ich möchte alle leerzeichen aus char *text durch newlines ersetzen.
also:

C++:
for(c=0;c<strlen(text);c++) if (text[c]==' ') text[c]='\n';

oder gar:

C++:
for(char* textp=text;*textp!=0;textp++) if (*textp==' ') *textp='\n';

ich bekomm beidemale "segmentation overflow", aber ich komm' einfach nicht auf den fehler... hülfe!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2003, 18:25 Uhr
0xdeadbeef
Gott
(Operator)


Wie ist text deklariert, und was schreibst du da wie rein?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.09.2003, 19:47 Uhr
kronos
Quotenfisch
(Operator)



C++:
char *text;
text="hier steht eine stinknormale message";

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.09.2003, 20:12 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich weiss zwar nicht warum aber wenn du es so deklarierst funzt es


C++:
char text[]="hier steht eine stinknormale message";
for(int c=0;c<strlen(text);++c) if (text[c]==32) text[c]=10;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.09.2003, 20:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
Mich würde jetzt allerdings auch mal interessieren warum das nicht funktioniert


C++:
char *text;
text="hier steht eine stinknormale message";


so scheint ein speicherbereich angelegt zu werden in dem nicht rumgeschrieben werden darf, warum ist das so

was ist wenn ich text woanders hinzeigen lasse. Bleibt das worauf text vorher gezeigt hat auf alle ewigkeit im speicher oder wird das gelöscht wenn der block verlassen wird?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2003, 20:37 Uhr
virtual
Sexiest Bit alive
(Operator)


Stringliterale (also das, was in doppelten Anführungszeichen steht), sind Konstanten. stell dir der Einfachhait halber einfach vor ein Literal hätten den typen char const * const, oder - wie es die meisten wohl schreiben würden: const char* const.
Bei

C++:
char* text = "Bla";


Weist Du der Variablen text eine solche Konstante zu. Letztlich castest Du hier implizit alles, was const ist, weg. Manche Compiler warnen mit entsprechenden Flags (wie zB der gcc, option -Wwrite-strings) an dieser Stelle, andere nicht.
Letztlich ist obiger Code generell schlechter Stil und man sollte schreiben:

C++:
[b]const[/b] char* text = "Bla";



Die andere Frage war wohl, warum es mit

C++:
char text[] = "Bla";


geht. Nun, das liegt einfach daran, daß der Obige Ausdruck eine abkürzende Array initialisierung ist. Man könnte auch schreiben:

C++:
char text[] = {'B', 'l', 'a', 0};


Der Unterschied zwischen der Arrayinitialisierung und der Zuweisung ist ganz einfach der, daß text bei der Arrayinitialisierung seinen eigenen Speicher hat, bei der (Pointer)Zuweisung eben nicht.
Der Kompiler kann Konstanten in einen READONLY Speicherbreoch legen, wird dies bei modernen Betriebssystemen idR auch tun. -> SIGSEGV wenn auf Konstante geschrieben wird.
--
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
006
13.09.2003, 20:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
const char* text = "Bla";


das war der für mich entscheidende teil den ich nur vermuten konnte

Danke
--
...fleißig wie zwei Weißbrote
 
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: