Comment stocker une chaîne dans un pointeur de caractère?

J’ai une confusion avec le programme suivant

#include void main() { char *ssortingng; ssortingng = (char *)malloc(5); ssortingng = "abc"; // <<<<<<<<<< why *string="abc" is not working. How string = "abc" is working? printf("%s", string); } 

Mais le même programme avec integer fonctionne

 char *i; i=(int *)malloc(sizeof(int)); *i=4; <<<<<<<< this is working fine printf("%d",*i); 

Pourquoi *ssortingng = "abc" ne fonctionne pas?

ssortingng est définie en tant que pointeur sur char. *ssortingng est un caractère. "abc" est un littéral de chaîne. Vous êtes en train d’assigner l’adresse du littéral chaîne à char et le compilateur devrait émettre un avertissement du type:

 warning: assignment makes integer from pointer without a cast 

Par exemple, *ssortingng = 'a'; fonctionnera car un seul caractère est atsortingbué.

Comment ssortingng = "abc" fonctionne?

Parce que l’adresse du littéral de chaîne "abc" est affectée à la ssortingng qui est un pointeur sur char.

Et BTW, ce faisant, vous avez perdu la mémoire allouée précédemment par malloc() et provoqué une fuite de mémoire.

Comment stocker une chaîne dans un pointeur de caractère? Vous pouvez utiliser simplement:

 strcpy(ssortingng, "abc"); 

*ssortingng indique le caractère unique "abc" est chaîne littérale. Ce n’est pas un personnage.

 *ssortingng='a'; // It will work. 

Ne jetez pas le résultat de Malloc et de sa famille.

Vous pouvez utiliser la fonction strcpy pour le faire.

 strcpy(ssortingng,"abc");