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");