valor una tipo puede entre entidad diferencia asignar c pointers const-char

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.