2016-07-14 11 views
-1

Wie kann ich konstante Zeichenketten deklarieren und welchen Nutzen haben sie beim Programmieren? Ich weiß nicht, ob ich das richtig mache, aber würde dies der richtige Weg sein, es zu tun ?:Wie deklariere ich konstante Zeichenfolgen in C und welchen Nutzen haben sie?

const char my_string="Hello"; 
+0

Wenn Sie diese Codezeile kompilieren, werden Sie feststellen, dass sie nicht korrekt ist. –

+0

So wahr, http://www.tutorialspoint.com/compile_c_online.php – Jay

+0

Dies würde in den ersten paar Kapiteln von jedem [anständige Einführung C Buch] (http://stackoverflow.com/questions/562303/the- definitive-c-book-guide-und-liste). –

Antwort

1
const char my_string="Hello"; 

Diese Ein Zeichenfolgenliteral wie "hello" ist von char[n] Typ nicht gültig C, nicht const char. Die korrekte Deklaration lautet

const char my_string[] = "Hello"; 

Auch ist es eine gute Idee, Ihre Konstanten in ALLCAPS zu benennen.

+0

Ein C-String-Literal ist vom Typ 'char []' - nicht 'const' und kein Zeiger. (Wie jeder Ausdruck eines Array-Typs wird er in den meisten, aber nicht allen Kontexten implizit in einen Zeiger konvertiert.) –

+0

@KeithThompson behoben – stackptr

+1

Die Konvention, alle Großbuchstaben zu verwenden, gilt normalerweise für Makros. 'my_string' ist ein deklariertes Objekt, kein Makro und streng genommen keine Konstante. –

-1

Im C Programmiersprache, die Bedeutung von const ist viel weniger stark als in anderen ist, mehr-recent, Sprachen. In der Tat, könnte es gut gesagt werden, dass die Bedeutung ist überhaupt nicht die gleiche.

zu zitieren http://www.geeksforgeeks.org/const-qualifier-in-c/ ... (Schwerpunkt und Unterlassungen von mir):

Die Qualifierconst kann auf die Erklärung eines Variable angewendet werden, zu spezifizieren, dass sein Wert nicht geändert Das Ergebnis ist implementierungsdefiniert (!) wenn versucht wird, ein const zu ändern.

Der Schlüssel ist hier zu bemerken ist, dass in C(die in ihrer Verteidigung, aus den 1970er Jahren stammt), das Schlüsselwort const ein Qualifier ist. Es ist nicht eine "Kompilierzeitkonstante!"

Die Sprache C verwendet #define Deklarationen als ihre engste Annäherung an das Verhalten, das andere Sprachen verwenden, wenn sie mit dem Schlüsselwort const dargestellt werden.

Betrachten Sie die folgende Web-Seite, "The C++ 'const' Erklärung, warum & Wie" wo Autor Andrew Hardwick ehrlich gesagt die Behandlung von diesem Begriff beschreibt sowohl in der C und C++ Sprachen: http://duramecho.com/ComputerInformation/WhyHowCppConst.html

Kontrast beide dieser Sprachen in anderen Sprachen Behandlung dieses Wortes, das sie als eineErklärung seine (kein Qualifier) ​​, und die sie allgemein in eine völlig anderen Art und Weise zu behandeln.

+1

Sie diskutieren die Bedeutung von "const", aber Sie beantworten die Frage nicht wirklich. Und es gibt eine einfachere Erklärung dessen, was "const" bedeutet: es bedeutet * read-only *. –

+0

Es scheint mir sehr klar zu sein ... und natürlich könnte ich mich völlig irren ... dass das OP "[fast alle ...] anderen Sprachen" das Wort "const" im Sinn hat. Daher meine (langatmige) Post. "Während Sie absolut richtig sind, Keith, * im Kontext von 'C', so gut verstanden von denen von uns, die es regelmäßig verwenden," * sehe ich vor uns eine Quell-Zeichenfolge "die ganz zu Hause wäre" in fast jeder * anderen * Sprache. "Das ist der Gesichtspunkt, der meine Antwort leitete. –

+0

Das OP fragt, wie man" konstante Zeichenketten "deklariert, und zeigt ein Beispiel, das mit dem Zusatz eines' * 'korrekt wäre. Die Frage ist nicht 100% klar, aber ich bin mir ziemlich sicher, dass du sie nicht beantwortet hast. –

0

hier ist die Antwort: -

Methode 1

const char my_string[] = "Hello"; 

Methode 2

const char *my_string="Hello"; 

wie Sie fragen, warum es in C Programmieren der verwendet wird, Antwort ist, wenn w Wenn der Wert gleich bleiben soll und der Wert vor dem Überschreiben geschützt wird, deklarieren wir die Variable als konstant.

+0

Und doch ist '* my_string' hier eine nicht konstante Variable, die auf konstante Daten zeigt, so dass die Variable * nicht * vor (über) schreibgeschützt ist. –