429 Stimmen

Wie man die Warnungen `deprecated conversion from string constant to 'char*'` in GCC los wird.

Ich arbeite an einem äußerst großen Codebasis und habe kürzlich auf GCC 4.3 aktualisiert, was jetzt diese Warnung auslöst:

Warnung: veraltete Konvertierung von String-Konstante zu 'char*'

Offensichtlich ist der richtige Weg, um dies zu beheben, jede Deklaration wie

char *s = "Konstante Zeichenfolge";

oder Funktionsaufruf wie:

void foo(char *s);
foo("Konstante Zeichenfolge");

und sie zu const char Zeigern zu ändern. Allerdings würde das bedeuten, dass ich mindestens 564 Dateien berühren müsste, was keine Aufgabe ist, die ich zu diesem Zeitpunkt ausführen möchte. Das Problem im Moment ist, dass ich mit -Werror ausgeführt werde, also brauche ich eine Möglichkeit, um diese Warnungen zu unterdrücken. Wie kann ich das machen?

2 Stimmen

Wenn Sie sich daran machen, 554 Zeilen zu ersetzen, ist sed ein guter Freund. Stellen Sie jedoch sicher, dass Sie zuerst ein Backup erstellen.

2 Stimmen

Ich habe mir die Diskussionen darüber angesehen, wie man die Fehlermeldungen unterdrücken kann und was die korrekten Ersatzwerte sein sollten. Ich habe keine Meinung dazu. Ich denke jedoch, dass Matt auf dem richtigen Weg ist. Definieren Sie, was Sie durch was ersetzen möchten. Sie benötigen nur die richtigen regulären Ausdrücke. Machen Sie die Änderungen in einer Kopie. Verwenden Sie "diff", um sie mit dem Original zu vergleichen. Das Ändern mit sed ist schnell, einfach und kostenlos, diff ist ebenfalls schnell, einfach und kostenlos. Probieren Sie es aus und sehen Sie, wie viele Änderungen Sie überprüfen müssen. Geben Sie an, was Sie durch was ersetzen möchten, und lassen Sie die Benutzer Regex-Ersatzwerte vorschlagen.

0 Stimmen

Die gesamte Diskussion verfehlt den Punkt, warum dieses Problem überhaupt gelöst werden muss, laut der gcc-Warnung. Der Grund steht in David Schwartz' Antwort stackoverflow.com/questions/56522654/….

7voto

alexsid Punkte 71

Testzeichenkette ist eine konstante Zeichenkette. Sie können es also wie folgt lösen:

char str[] = "Testzeichenkette";

oder:

const char* str = "Testzeichenkette";
printf(str);

3voto

Dario Punkte 47

Verwenden Sie einfach Typumwandlung:

(char*) "test"

2voto

tejp124 Punkte 336

Führen Sie ein Typecasting von konstantem String zu Zeiger auf Zeichen durch i.e.

char *s = (char *) "Konstante Zeichenkette";

1voto

Ich verstehe nicht, wie man deine Lösung anwenden soll :( – kalmanIsAGameChanger

Bei der Arbeit mit einem Arduino Sketch hatte ich eine Funktion, die Warnungen verursachte.

Ursprüngliche Funktion:

char StrContains(char *str, char *sfind)

Um die Warnungen zu stoppen, fügte ich das const vor dem char *str und dem char *sfind hinzu.

Geändert:

char StrContains(const char *str, const char *sfind).

Alle Warnungen verschwanden.

1voto

Sohrab Punkte 1028

Ersetzen Sie in C++:

char *str = "hello";

mit:

std::string str("hello");

Und wenn Sie es vergleichen möchten:

str.compare("HALLO");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X