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!