En passant char pointeur en C
Bon alors je suis en train de passer un pointeur de char à une autre fonction. Je peux le faire avec un tableau de char, mais ne peut pas faire avec un pointeur de char. Le problème est que je ne sais pas la taille de celui-ci donc je ne peut rien déclarer au sujet de la taille à l'intérieur de la main()
fonction.
#include <stdio.h>
void ptrch ( char * point) {
point = "asd";
}
int main() {
char * point;
ptrch(point);
printf("%s\n", point);
return 0;
}
Cela ne fonctionne pas, cependant, que ces deux ouvrages:
1)
#include <stdio.h>
int main() {
char * point;
point = "asd";
printf("%s\n", point);
return 0;
}
2)
#include <stdio.h>
#include <string.h>
void ptrch ( char * point) {
strcpy(point, "asd");
}
int main() {
char point[10];
ptrch(point);
printf("%s\n", point);
return 0;
}
Donc je suis en train d'essayer de comprendre la raison et une solution à mon problème
OriginalL'auteur Sarp Kaya | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Votre pointeur est passé par valeur, et ce code copies, puis remplace la copie. De sorte que le pointeur d'origine est intacte.
P. S. Point à noter que lorsque vous ne
point = "blah"
vous êtes à la création d'une chaîne de caractères littérale, et toute tentative de modifier est comportement Indéfini, si il devrait vraiment êtreconst char *
De Fixer - passer un pointeur vers un pointeur @Hassan TM, ou retourner le pointeur comme ci-dessous.
les deux sont hyper rapide (différence serait minime, le cas échéant), mais je préfère le "retour du pointeur de la" méthode pour des raisons de lisibilité.
Cela va déclencher un avertissement de variables locales si vous n'avez pas coder en dur la valeur de retour comme une chaîne littérale.
OriginalL'auteur Karthik T
Cela devrait fonctionner depuis pointeur vers le pointeur de char est passé. Par conséquent, toute modification du pointeur de la être vu de l'extérieur par la suite.
OriginalL'auteur hmatar
Ici:
int main() {
char * point;
ptrch(point);
Vous êtes de passage
point
en valeur. Ensuite,ptrch
définit sa propre copie locale depoint
à point à"asd"
, laissant lepoint
dansmain
intacte.Une solution serait de passer un pointeur vers
main
'spoint
:void ptrch(char **pp) { *pp = "asd"; return; }
OriginalL'auteur Ricky Stewart
Si vous modifiez la valeur du pointeur dans une fonction, il restera changé seulement dans le fait qu'un appel de fonction.
Ne salissez pas votre tête avec des pointeurs et essayer:
La même chose avec le pointeur de la souris. Vous ne pas changer l'adresse qu'il indique.
Si vous affecter à une variable passée par valeur, la variable en dehors de la fonction restera inchangée.
Vous pourriez passer par un pointeur (de pointeur) et de le remplacer par dereferrencing et c'est la même chose avec un int - dans ce cas, il n'a pas d'importance si le type est int ou char * .
OriginalL'auteur KamikazeCZ
d'abord déclarer la fonction......comme ce
prochaine écriture de code principal.....
OriginalL'auteur shoaib soudagar