Comment convertir const char * en char * en C?

Dans mon projet, il y a une méthode qui ne retourne qu’un const char* , alors que j’ai besoin d’une chaîne de caractères car l’API n’accepte pas les const char* .

Une idée de comment convertir entre const char* en char* ?

Pour être sûr, vous ne cassez pas les choses (par exemple lorsque ces chaînes sont modifiées dans votre code ou plus haut), ou vous écrasez votre programme (si la chaîne renvoyée était littérale, par exemple, "hello I'm a literal ssortingng" et vous commencez à le modifier), faites une copie de la chaîne renvoyée.

Vous pouvez utiliser strdup() pour cela, mais lisez les petits caractères . Ou bien vous pouvez bien sûr créer votre propre version si elle n’est pas disponible sur votre plate-forme.

Et la question demeure: pourquoi avez-vous besoin d’un caractère char* , ne pouvez-vous pas changer votre code pour qu’il fonctionne avec const char* ?

Tout d’abord, vous ne devez faire de telles choses que si cela est vraiment nécessaire, par exemple pour utiliser une API ancienne avec des arguments char* qui ne sont pas modifiés. Si la valeur de conversion est modifiée et que la variable d’origine était constante, il s’agit d’un comportement non spécifié == demandant des problèmes.

Utiliser la dissortingbution:

 (char*)const_char_ptr 

Vous pouvez utiliser la fonction strdup qui a le prototype suivant

 char *strdup(const char *s1); 

Exemple d’utilisation:

 #include  char * my_str = strdup("My ssortingng literal!"); char * my_other_str = strdup(some_const_str); 

ou strcpy / strncpy à votre tampon

ou réécrivez vos fonctions pour utiliser const char * tant que paramètre à la place de char *

Un const pour un pointeur indique un emplacement de mémoire “en lecture seule”. Alors que ceux sans const sont des zones de mémoire en lecture-écriture. Ainsi, vous ne pouvez pas convertir un const (emplacement en lecture seule) en un emplacement normal (lecture-écriture).

L’autre consiste à copier les données dans un autre emplacement de lecture-écriture et à passer ce pointeur à la fonction requirejse. Vous pouvez utiliser strdup() pour effectuer cette action.

Vous pouvez le lancer en faisant (char *)Identifier_Of_Const_char

Mais comme il y a probablement une raison pour laquelle l’API n’accepte pas les const cahr * , vous devriez le faire uniquement, si vous êtes sûr, la fonction n’essaie pas d’atsortingbuer une valeur dans l’intervalle de votre const char* un non const.