una - diferencia entre char y const char
Cómo convertir const char*a char*en C? (5)
En primer lugar, debe hacer tales cosas solo si es realmente necesario, por ejemplo, usar alguna API antigua con argumentos char*
que no se modifiquen. Si el valor de conversión se modifica y la variable original es const, esto es un comportamiento no especificado == preguntando por problemas.
Usar elenco:
(char*)const_char_ptr
En mi proyecto hay un método que solo devuelve un const char*
, mientras que necesito una cadena char*
, ya que la API no acepta const char*
.
¿Alguna idea de cómo convertir entre const char*
a char*
?
Para estar seguro no rompes cosas (por ejemplo, cuando estas cadenas cambian en tu código o más arriba), o bloqueas tu programa (en caso de que la cadena devuelta fuera literal, por ejemplo, "hello I''m a literal string"
y empiezas a editarlo), haz una copia de la cadena devuelta.
Puede usar strdup()
para esto, pero lea la letra pequeña . O puede, por supuesto, crear su propia versión si no está allí en su plataforma.
Y la pregunta sigue siendo: ¿por qué necesita un char*
, no puede cambiar su código para que funcione con const char*
?
Puede usar la función strdup
que tiene el siguiente prototipo
char *strdup(const char *s1);
Ejemplo de uso:
#include <string.h>
char * my_str = strdup("My string literal!");
char * my_other_str = strdup(some_const_str);
o strcpy / strncpy a su buffer
o reescriba sus funciones para usar const char *
como parámetro en lugar de char *
cuando sea posible para que pueda conservar la const
Puedes lanzarlo haciendo (char *)Identifier_Of_Const_char
Pero como probablemente haya una razón por la que la API no acepta const cahr *
, debe hacer esto solo, si está seguro, la función no intenta asignar ningún valor en el rango de su const char*
que ha cambiado a uno no const.
Un const
a un puntero indica una ubicación de memoria de "solo lectura". Mientras que los que no tienen const
son áreas de memoria de lectura y escritura. Por lo tanto, "no se puede" convertir una const
(ubicación de solo lectura) en una ubicación normal (lectura-escritura).
La alternativa es copiar los datos en una ubicación diferente de lectura y escritura y pasar este puntero a la función requerida. Puede usar strdup()
para realizar esta acción.