wake-up-neo.com

Wie konvertiert man const char * in char * in C?

In meinem Projekt gibt es eine Methode, die nur einen const char* - String zurückgibt, während ich einen char* - String benötige, da die API keinen const char* - String akzeptiert.

Irgendeine Idee, wie man zwischen const char* Und char* Konvertiert?

44
Morpheus

Um sicherzugehen, brechen Sie keine Sachen (zum Beispiel wenn diese Zeichenfolgen in Ihrem Code geändert werden oder weiter oben) oder stürzen Sie Ihr Programm ab (falls die zurückgegebene Zeichenfolge zum Beispiel wörtlich war wie "hello I'm a literal string" Und Sie beginnen zu edit it), mache eine Kopie der zurückgegebenen Zeichenkette.

Sie könnten hierfür strdup() verwenden, aber lesen Sie das Kleingedrucktes . Sie können natürlich auch eine eigene Version erstellen, wenn diese nicht auf Ihrer Plattform vorhanden ist.

Und die Frage bleibt: Warum brauchen Sie einen char*, Können Sie Ihren Code nicht so ändern, dass er mit const char* Funktioniert?

21
meaning-matters

Zuallererst sollten Sie solche Dinge nur tun, wenn es wirklich notwendig ist - z. benutze ich eine alte API mit char* Argumente, die nicht geändert werden. Wenn eine API-Funktion die Zeichenfolge ändert, die ursprünglich const war, ist dies ein nicht angegebenes Verhalten, das sehr wahrscheinlich zum Absturz führt.

Besetzung verwenden:

(char*)const_char_ptr
42
Wojtek Surowka

Sie können die Funktion strdup mit dem folgenden Prototyp verwenden

char *strdup(const char *s1);

Anwendungsbeispiel:

#include <string.h>

char * my_str = strdup("My string literal!");
char * my_other_str = strdup(some_const_str);

oder strcpy/strncpy in Ihren Puffer

oder schreiben Sie Ihre Funktionen um const char * als Parameter anstelle von char * wo möglich, damit Sie den const behalten können

19
j123b567

Ein const auf einen Zeiger zeigt einen "Nur-Lese" -Speicherort an. Während diejenigen ohne const Lese-Schreib-Speicherbereiche sind. Sie können also einen const (schreibgeschützten Speicherort) nicht in einen normalen Speicherort (Lese-/Schreibzugriff) konvertieren.

Die Alternative besteht darin, die Daten an einen anderen Lese-/Schreibort zu kopieren und diesen Zeiger an die erforderliche Funktion zu übergeben. Sie können strdup() verwenden, um diese Aktion auszuführen.

5
raghav3276

Du kannst es wirken, indem du (char *)Identifier_Of_Const_char

Da es jedoch wahrscheinlich einen Grund gibt, warum die API const cahr * Nicht akzeptiert, sollten Sie dies nur tun, wenn Sie sicher sind, dass die Funktion nicht versucht, einen Wert im Bereich Ihres const char* welches du zu einem non const gecastet hast.

0
dhein

So konvertieren Sie ein const char* bis char* Sie könnten eine Funktion wie diese erstellen:

#include <stdio.h>

char* unconstchar(const char* s) {
    int i;
    char* res;
    for (i = 0; s[i] != '\0'; i++) {
        res[i] = s[i];
    }
    res[i] = '\0';
    return res;
}

int main() {
    const char* s = "hi this is bikash\n";
    char* p = unconstchar(s);
    printf("%s",p);
}
0
Bikash