Подтвердить что ты не робот

Как преобразовать const char * в char * в C?

В моем проекте есть метод, который возвращает только const char*, тогда как мне нужна строка char*, поскольку API не принимает const char*.

Любая идея, как преобразовать между const char* в char*?

4b9b3361

Ответ 1

Чтобы быть в безопасности, вы не нарушаете вещи (например, когда эти строки меняются в коде или дальше) или сбой программы (в случае, если возвращаемая строка была буквальной, например, как "hello I'm a literal string"), и вы начинаете отредактируйте его), сделайте копию возвращаемой строки.

Вы можете использовать strdup() для этого, но читайте мелкий шрифт. Или вы можете, конечно, создать свою собственную версию, если она отсутствует на вашей платформе.

И остается вопрос: зачем вам нужен char*, вы не можете изменить свой код, чтобы он работал с const char*?

Ответ 2

Прежде всего, вы должны делать такие вещи, только если это действительно необходимо - например, использовать некоторый API старого стиля с аргументами char* которые не модифицируются. Если функция API изменяет строку, которая изначально была константой, то это неуказанное поведение, очень вероятное падение.

Используйте приведение:

(char*)const_char_ptr

Ответ 3

Вы можете использовать функцию strdup, которая имеет следующий прототип

char *strdup(const char *s1);

Пример использования:

#include <string.h>

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

или strcpy/strncpy в буфер

или перепишите свои функции, чтобы использовать const char * как параметр вместо char *, где это возможно, чтобы сохранить const

Ответ 4

A const к указателю указывает ячейку памяти "только для чтения". В то время как те, у которых const нет, являются областями памяти для чтения и записи. Таким образом, вы "не можете" преобразовать const (только для чтения) в обычное (чтение-запись) местоположение.

Альтернативой является копирование данных в другое место для чтения и записи и передача этого указателя в нужную функцию. Вы можете использовать strdup() для выполнения этого действия.

Ответ 5

Вы можете сделать это, выполнив (char *)Identifier_Of_Const_char

Но, поскольку есть вероятно, что api не принимает const cahr *, вы должны сделать это только, если вы уверены, функция не пытается назначить какое-либо значение в диапазоне вашего const char*, которое вы наложили на неконтинентный.

Ответ 6

Чтобы преобразовать const char* в char* вы можете создать такую функцию:

#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);
}