Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.04.2015, 09:53

c_str ...? Was ist das? Hilfe!

Hallo Leute!
Bei mehreren Listings im Buch kommt c_str() vor und ich glaube es wurde nie erklärt (zB Listing 11.5). Kann jemand von euch erklären was es macht?

Danke schonmal,
Jakob aka purzel69

2

12.04.2015, 10:32

lmgtfy.

MfG
Check

3

12.04.2015, 11:44

Ich hatte das schon gegoogled... Aber leider hat sich für mich aus folgenden Zeilen nichts erschließen lassen. Ich habe es leider eben nicht verstanden und deswegen hier gefragt. Ich hätte gerne trotzdem eine Antwort :)

http://en.cppreference.com/w/User:Nate/r…ic_string/c_str

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (12.04.2015, 16:04) aus folgendem Grund: Copy/Paste von cppreference entfernt und Link gesetzt


4

12.04.2015, 11:49

Einfach ausgedrückt: Es gibt zwei Sorten von Strings. Die modernen, und die alten. Man möchte immer die modernen benutzen, weil sie besser sind, es gibt aber viele alte Funktionen die nur mit den alten funktionieren. Mit c_str() kann man aus einem modernen String einen alten String machen und somit auch die alten Funktionen weiterhin benutzen.
Lieber dumm fragen, als dumm bleiben!

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

12.04.2015, 12:04

Ein C string ist ein char array. Ein C++ string aus der Standardbibliothek ist eine Klasse, die dir das Handling mit dem char array abnimmt. Die Methode c_str der Klasse string gibt dir ihr internes char array zurück.

C-/C++-Quelltext

1
2
std::string einString = "Hallo Welt!";
const char* cStyle = einString.c_str();

Da C diese string Klasse nicht kennt, du aber C Biblotheken nutzen möchtest, brauchst du die Methode c_str um den C++ string einer C Funktion übergeben zu können.

C-/C++-Quelltext

1
2
3
4
5
6
7
ichBinEineCFunktion(einString.c_str());

// Beispiel für C++ Funktion
void tuWasDamit(const std::string& str){
    // hier nutzen wir die Referenz die wir auf den string haben, es wurde kein char array übergeben, daher können wir z.B. sowas machen:
    str += '\n'; // hängt einen Zeilenumbruch an
}

Das Anhängen eines \n wäre unter C etwas komplizierter, da man dafür eine Funktion aufrufen müsste (die C in der Std aber bereitstellt). Der += Operator fühlt sich aber einfach natürlicher an und macht daher mehr Spaß :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (12.04.2015, 15:05)


6

12.04.2015, 12:25

ok, danke! Eure beiden Erklärungen habe ich verstanden :)
Eine Frage habe ich aber noch: Warum benutzt Heiko Kalista im Buch c_str() um Strings per cout auszugeben? Geht das nicht ohne?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

12.04.2015, 13:35

Ja geht ohne.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

8

12.04.2015, 14:25

Eine Frage: Wer gibt nacher den Speicher auf den c_str() verweist frei? Der string im destructor?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

12.04.2015, 14:36

Eine Frage: Wer gibt nacher den Speicher auf den c_str() verweist frei? Der string im destructor?

http://stackoverflow.com/questions/11336…se-a-memory-lea
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

10

12.04.2015, 14:36

C-/C++-Quelltext

1
2
std::string einString = "Hallo Welt!";
char* cStyle = einString.c_str();

const char*!
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Werbeanzeige