034
26.07.2003, 14:04 Uhr
0xdeadbeef
Gott (Operator)
|
Dass man char* verstehen sollte, wenn man ernsthaft coden will, ist klar. Ob man sich aber, wenn man gerade anfängt, zu programmieren, gleich mit Zeigerarithmetik rumschlagen sollte, wage ich zu bezweifeln. Dass man etwas verstehen sollte, heißt aber nicht, dass man es auch immer auf blöd anwenden sollte. Zu verstehen, wie eine Registermaschine funktioniert, ist eine sinnvolle Sache. Assembler zu schreiben macht dagegen nur sehr selten Sinn, weil moderne Compiler in aller Regel besser optimieren, als man es selbst von Hand hinbekäme. Dasselbe gilt für string vs. char*. Du solltest den char* verstehen, aber mit string arbeiten - und dabei das Wissen, was du über char* und Speichermanagement hast, anwenden. Nimm zum Beispiel folgendes Stück Code:
C++: |
char s[21]; cout << "Gib 20 Zeichen ein: "; cin >> s;
|
Wenn du einen DAU hast, der nicht zählen kann und dir 30 Zeichen eingibt, baut das Programm Mist. Nimm dagegen
C++: |
string s; cout << "Gib 20 Zeichen ein: "; cin >> s;
|
Das ist sicher, und du kannst den Fehler abfangen. Allerdings ist es nicht performant, weil der string u.U. mehrmals neuen Speicher anfordern muss. Deswegen macht man es sinnigerweise so:
C++: |
string s(20); cout << "Gib 20 Zeichen ein: "; cin >> s;
|
Denn so fordert der string zu Anfang schonmal 20 Zeichen an, und du hast trotzdem die Sicherheit, dass das Ding keinen Mist baut, wenn der User zu dumm ist. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 26.07.2003 um 14:05 Uhr von 0xdeadbeef editiert. |