Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kurze char Frage

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 < [ 2 ] [ 3 ]
000
30.08.2005, 16:47 Uhr
~Luna
Gast


Hi Jungs,

ich habe ein char das ich immer weiter auffüllen will quasi:

test = "hallo"
test +="du"
test ergibt "hallo du"

weis dass das kein c++ code ist, dient nur zum Veranschaulichen!
wie kann ich das mit nem char* machen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.08.2005, 17:31 Uhr
Pablo
Supertux
(Operator)


Mit einem char* ist das schwer, denn dazu muss dir Speicher zur Verfügung stehen und außerdem strcat bzw. strncat benutzen, denn Ausdrücke wie "string1"+"strings2" führen nicht zu "string1string2" sondern zu der Addition der Adressen, wo "string1" und "string2" gespeichert werden (für C Anfänger können Zeichenketten so verwirrend sein).

Lies mal die FAQ: Mit C Strings richtig umgehen
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 30.08.2005 um 17:32 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.08.2005, 18:10 Uhr
(un)wissender
Niveauwart


Nimm std::string.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.08.2005, 23:32 Uhr
ao

(Operator)



Zitat von Pablo:
Ausdrücke wie "string1"+"strings2" führen nicht zu "string1string2" sondern zu der Addition der Adressen ...

Und das Ergebnis davon ist völlig unsinnig und hat überhaupt nichts mit dem Verketten der Strings zu tun.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.08.2005, 09:29 Uhr
~Luna
Gast


das ist mir bewußt! Also gib es keine ordentliche Möglichkeit! Das wollte ich nur wissen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.08.2005, 09:50 Uhr
(un)wissender
Niveauwart


Klar gibt es die.
strcat und so machen das schon, man muss nur ziemlich aufpassen bei ihrer Benutzung.
Und wie gesagt, std::string kann genau das was dein Beispiel zeigt. Wenn test ein std::string wäre, dann würde das so kompilieren und das tun, was du erwartest.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.08.2005, 11:30 Uhr
~Luna
Gast


Na gut ich wollte nur mal versuchen auf std::string zu versichten um wirklich ansi zu sein!
Egal. Hab noch ne kurze frage?

wenn ich aus einer Funktion ein char * zurückgebe welches ich in der funktion declariert habe also:


C++:

char * testClass::testFunktion(void)
{
   char * test = new char[100];
   sprintf(test,"hallo du");
   return test;
}



Und ich den Pointer Folgendermaßen annehme:


C++:

if (strcmp(testFunction(),"hallo du")==0)
...



was passiert jetzt mit dem speicherbereich von test??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.08.2005, 11:34 Uhr
(un)wissender
Niveauwart


Nun, std::string ist Ansi C++, halt std.

Zu deiner Frage: das ist ein Memory Leak. Der Pointer ist verloren und der Speicher wird fühestens beim beenden deines Programms von BS freigegeben.

Nimm std::string, da hast diese Probleme nicht.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.08.2005, 11:42 Uhr
~Luna
Gast


Hab ich es mir doch gedacht! Danke für den sachdienlichen Hinweiß :-)
Ich glaub ich fang wirglich an mit std::sring zu arbeiten. Aber wie kann ich z.B. ein BSTR in ein std::String wandeln? Bei nem char ist das einfach! Zweite frage : Muß ich mich bei std:string überhaupt nicht um den Speicherkümmern?? Wen ja wieso arbeitet man überhaupt noch mit char?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
31.08.2005, 11:43 Uhr
ao

(Operator)



Zitat von ~Luna:
das ist mir bewußt! Also gib es keine ordentliche Möglichkeit! Das wollte ich nur wissen!

Es gibt immer eine Möglichkeit. Die C-Funktionen sind ein bisschen ärmlich, aber ordentliche Ergebnisse sind damit genauso erzielbar wie mit leistungsfähigen Klassen, sie erfordern vom Programmierer nur mehr Verständnis für die Zusammenhänge und mehr Sorgfalt. Als es die Klassen noch nicht gab, haben wir nur so gearbeitet.

Lies zum Einstieg Pablos FAQ-Artikel (siehe oben) und danach in einem C-Buch deiner Wahl das Kapitel über Strings.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: