Как конвертировать const char* в char * в C?

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

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

7 ответов

Решение

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

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

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

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

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

(char*)const_char_ptr

Вы можете использовать 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

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

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

Чтобы преобразовать 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);
}

Вы можете разыграть это, делая (char *)Identifier_Of_Const_char

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

Например, вы могли бы написать так:

      const char* a = "art.bin";
char* b = new char[sizeof(a)];
strcpy(b, a);
Другие вопросы по тегам