Heim >Backend-Entwicklung >C++ >Warum erhalte ich in C die Warnung „Veraltete Konvertierung von String-Literal in \'char*\'\', wenn ich ein String-Array deklariere?

Warum erhalte ich in C die Warnung „Veraltete Konvertierung von String-Literal in \'char*\'\', wenn ich ein String-Array deklariere?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 10:48:30704Durchsuche

Why do I get a

Veraltete Konvertierung von String-Literal in „char*“ in C

Bei der Deklaration eines Arrays von Strings wie unten gezeigt:

<code class="cpp">char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

Möglicherweise wird Ihnen die Compiler-Warnung angezeigt: „Veraltete Konvertierung von String-Literal in ‚char*‘.“

Verstehen des Fehlers

Dieser Fehler hat seinen Ursprung in die Tatsache, dass die in „{}“ bereitgestellten Zeichenfolgen Zeichenfolgenliterale sind, die im Programmcode selbst definiert sind. Standardmäßig sind Zeichenfolgenliterale unveränderlich, was bedeutet, dass Sie ihren Inhalt zur Laufzeit nicht ändern können, beispielsweise durch Schreiben auf ihre Zeiger.

Das Deklarieren des Arrays mit Zeigern auf Zeichen macht es anfällig für Laufzeitfehler, wenn Sie versuchen, darauf zu schreiben die ursprüngliche Eingabe („rot“, „orange“ usw.). Dies könnte versehentlich die ursprünglichen Zeichenfolgen ändern und zu unvorhersehbaren Ergebnissen führen.

Nicht veraltete Lösung

Um dieses Problem zu beheben und potenzielle Laufzeitfehler zu vermeiden, sollten Sie das Array deklarieren als const-Zeiger auf Zeichen.

<code class="cpp">const char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

Durch das Hinzufügen des const-Schlüsselworts stellen Sie sicher, dass die Zeichenfolgen unveränderlich sind und nicht unbeabsichtigt geändert werden.

Überlegungen zum Bearbeiten von Werten

Wenn Sie absehen, dass die String-Werte zur Laufzeit geändert werden müssen, können Sie die String-Literale in ein separates Array kopieren oder Mechanismen wie strtok() verwenden, um die einzelnen Zeichen zu manipulieren.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C die Warnung „Veraltete Konvertierung von String-Literal in \'char*\'\', wenn ich ein String-Array deklariere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn