[ERLEDIGT] Strings oder char*
-
Hallo Leute,
benutzt man in einem C++ Programm noch die guten alten char*?
Ich würde gerne mal sehen wie diese Funktion:
void Geoobject::set_comment(const char *new_comment){ int len = strlen(new_comment); if(len > 0 && len < 65534){ delete [] this->comment; comment = new char[len+1]; comment[len+1] = '\0'; strcpy(comment,new_comment); } else{ ... } }
In C++ aussieht.
-
void Geoobject::set_comment(const std::string &new_comment){ comment = new_comment; }
-
darkfate schrieb:
benutzt man in einem C++ Programm noch die guten alten char*?
So pauschal kann man das nicht sagen. Natürlich benutzt "man" noch Zeiger. Allerdings ist es empfehlenswert Klassen zu verwenden, die einem die SPeicherverwaltung abnehmen.
void Geoobject::set_comment(const std::string & szNewComment) { if(!sz.NewComment.isempty() && szNewComment.size() < 65534) this->szComment = szNewComment; else {} }
Sieht wesentlich übersichtlicher aus.
-
Danke schonmal für die Antworten.
Hat die String Klasse eine obere Grenze?
-
darkfate schrieb:
Hat die String Klasse eine obere Grenze?
Theoretisch nicht. praktisch wird natürlich irgendwo Ende sein und eine Exception (bad_alloc oder dergleichen) fliegen, das ist allerdings normalerweise weit jenseits der 64k, die du in deiner char*-Version festgenagelt hast.
Aus dem Grund ist auch die Abfrage in De-Be's Version vom C++-Standpunkt her ebenso unnötig wie die Präfixe für die ungarische Notation.
-
pumuckl schrieb:
Theoretisch nicht.
Naja, theoretisch dürfte die Obergrenze bei
std::numeric_limits<std::string::size_type>::max()
liegen...
-
Hat schon irgendwer erwähnt, dass die set_comment Funktion undefiniertes Verhalten erzeugt?
comment[len+1] = '\0';
-
Braunstein schrieb:
Hat schon irgendwer erwähnt, dass die set_comment Funktion undefiniertes Verhalten erzeugt?
comment[len+1] = '\0';
Huch?
-
darkfate schrieb:
Braunstein schrieb:
Hat schon irgendwer erwähnt, dass die set_comment Funktion undefiniertes Verhalten erzeugt?
comment[len+1] = '\0';
Huch?
Good catch, Braunstein!
darkfate, Du meintest wohl comment[len] = '\0';
Es ist aber sowieso überflüssig, da sich strcpy schon um die Nullterminierung kümmert.
-
Braunstein schrieb:
Hat schon irgendwer erwähnt, dass die set_comment Funktion undefiniertes Verhalten erzeugt?
comment[len+1] = '\0';
Und das ... dürfte auch nicht kompilieren.
-
Fellhuhn schrieb:
Braunstein schrieb:
Hat schon irgendwer erwähnt, dass die set_comment Funktion undefiniertes Verhalten erzeugt?
comment[len+1] = '\0';
Und das ... dürfte auch nicht kompilieren.
Da irrst du dich gewaltig, MSVC kompiliert nur so, so und nicht anders
Daher dieser Windows Experience.Danke für den Hinweis Braunstein
-
Wie sieht dann get_comment aus? So in etwa?
std::string const &Geoobject::get_comment() const{ return this->comment; }
-
darkfate schrieb:
Wie sieht dann get_comment aus? So in etwa?
std::string const &Geoobject::get_comment() const{ return this->comment; }
ja. wobei das this-> weggelassen werden kann.