Comment initialiser un tableau de char à l'aide d'un pointeur de char en C
Disons que j'ai un char pointeur appelé string1 qui pointe vers le premier caractère dans le mot "hahahaha". Je veux créer un char[] qui contient la même chaîne que string1 points à.
Comment se fait-ce qui ne fonctionne pas?
char string2[] = string1;
- Il y a une hypothèse implicite dans la question que les tableaux et les pointeurs sont la même chose en C (en essayant d'initialiser un nouveau tableau de
char
par référence à unchar*
pointeur). Ce n'est pas le cas et il est important de comprendre les différences d'éviter d'introduire des bogues subtils dans votre programme.
Vous devez vous connecter pour publier un commentaire.
Parce que ce n'est pas la façon dont le langage C a été définie.
Vous pouvez créer une copie à l'aide de
strdup()
[Remarque questrdup()
n'est pas ANSI C]Réf:
En C, vous pouvez faire quelque chose comme ceci:
Quand
string1
est défini comme ci-dessus (un tableau) avec une constante de l'initialiseur, le compilateur sait que sa longueur au moment de la compilation, etsizeof
sera de retour c'est la longueur y compris le terminateur null (qui est la taille des données).1) pointeur de string2 == pointeur de la chaîne1
changement dans la valeur va changer les autres
De poster poida
2) Faire une Copie
les changements dans la valeur de l'un d'eux ne va pas changer les autres
Dans C vous devez réserver de la mémoire pour contenir une chaîne.
Cela se fait automatiquement lorsque vous définissez une chaîne constante, et ensuite affecter à un char[].
D'autre part, lorsque vous écrivez
string2 = string1
,ce que vous êtes en train de faire est d'attribuer les adresses de mémoire de pointeur vers char objets. Si
string2
est déclare quechar*
(pointeur vers char), c'est la validité de la cession:La variable
string2
maintenant contient l'adresse du premier caractère de la constanta tableau de caractères "Bonjour.".C'est bien, aussi, d'écrire mot2 = mot1 quand
string2
est unchar*
etstring1
est unchar[]
.Cependant, il est supposé que un
char[]
a constante de l'adresse dans la mémoire. N'est pas modifiable.Donc, il n'est pas autorisé à écrire des phrases comme ça:
Cependant, vous êtes en mesure de modifier les caractères individuels de string2, parce que c'est un tableau de caractères:
Si vous souhaitez initialiser 2 tableaux de char alors le seul moyen est de les affecter à la même chaîne ou une copie de la première.
Ce que vous écrivez comme ceci:
... en fait devient:
Ici nous sommes implicitement en invoquant quelque chose appelé le initialiseur.
Initialiseur est chargé de faire le tableau de caractères, dans le scénario ci-dessus.
Initialiseur de cette, derrière la scène:
C est un très faible niveau de langue. Votre déclaration:
n'a pas de sens à C.
Il n'est pas possible de attribuer un tableau d'ensemble, à une autre en C. Vous devez copier lettre par lettre, que ce soit manuellement ou à l'aide de la fonction strcpy() fonction.
Dans la déclaration ci-dessus, l'initialiseur de ne pas connaître la longueur de la
another_str
variable tableau. Si vous dur code de la chaîne, au lieu de mettreanother_str
, alors cela fonctionnera.Quelques autres langues pourrait permettre de faire de telles choses... mais vous ne pouvez pas s'attendre à une voiture manuelle de changer de vitesse automatiquement. Vous êtes en charge de l'informatique.
Vous pouvez assigner l'adresse de chaîne1 à chaîne2 l'aide d'un pointeur comme ceci: