Hier habe ich zwei Zeilen Code
%Vor% Beide Codezeilen haben das gleiche Verhalten, daher kann ich keinen Unterschied erkennen, ob ich s1
über s2
oder umgekehrt vorziehen sollte. Zusätzlich zu s1 und s2 gibt es auch die Möglichkeit, std::string
zu verwenden. Ich denke, die Art, std :: string zu verwenden, ist die eleganteste. Während ich anderen Code betrachte, sehe ich oft diese Leute entweder use const char *
oder char s []
. Also, meine Frage ist jetzt, wann sollte ich const char * s1
oder char s []
oder std::string
verwenden? Was sind die Unterschiede und in welchen Situationen sollte ich welchen Ansatz verwenden?
Diese beiden sind nicht identisch. s1
ist unveränderlich: Es zeigt auf konstanten Speicher. Das Ändern von Zeichenfolgenliteralen ist ein nicht definiertes Verhalten.
Und ja, in C ++ sollten Sie std::string
bevorzugen.
Der erste ist konstant, der zweite nicht. std :: string ist ein Klassentyp und implementiert viele nützliche Funktionen und Methoden für die String-Manipulation, was es viel einfacher und benutzerfreundlicher macht. Die c-style 'strings' mit char-Zeigern sind schwer zu kontrollieren, zu manipulieren und verursachen oft Fehler, haben aber nicht den Overhead von std :: string. Im Allgemeinen ist es besser, sich an die std :: strings zu halten, da sie einfacher zu pflegen sind.
Diese beiden tun nicht haben das gleiche Verhalten. s1
ist ein einfacher Zeiger, der initialisiert wird, um auf einen (normalerweise nur lesbaren) Bereich des Speichers zu zeigen. s2
dagegen definiert ein lokales Array der Größe 5 und füllt es mit einer Kopie dieser Zeichenfolge.
Formal ist es nicht erlaubt, s1
zu ändern, also etwas wie s1[0] = 'a'
. Insbesondere unter seltsamen Umständen könnte es dazu führen, dass alle anderen "test"
s in Ihrem Programm "aest"
werden, weil sie alle den gleichen Speicher teilen. Dies ist der Grund, warum moderne Compiler schreien, wenn Sie
Andererseits ist das Ändern von s2
erlaubt, da es sich um eine lokale Kopie handelt.
Mit anderen Worten, im folgenden Beispiel
%Vor% s1
und s2
können sehr gut auf dieselbe Adresse im Speicher verweisen, während s3
und s4
zwei verschiedene Kopien derselben Zeichenfolge sind und sich in verschiedene Speicherbereiche.
Wenn Sie C ++ schreiben, verwenden Sie std::string
, es sei denn, Sie benötigen unbedingt ein Array von Zeichen. Wenn Sie ein veränderbares Array von Zeichen benötigen, verwenden Sie char s[]
. Wenn Sie nur eine unveränderliche Zeichenfolge benötigen, verwenden Sie const char*
.
Welches zu verwenden ist, hängt von Ihrer Anforderung ab. Pointer bietet Ihnen mehr Flexibilität. und in einigen Fällen Vulnerabilität. Strings sind eine sichere Option und sie bieten Iterator-Unterstützung.
Tags und Links c++