Okay so I am trying to pass a char pointer to another function. I can do this with an array of a char but cannot do with a char pointer. Problem is I don't know the size of it so I cannot declare anything about the size within the main()
function.
#include <stdio.h>
void ptrch ( char * point) {
point = "asd";
}
int main() {
char * point;
ptrch(point);
printf("%s\n", point);
return 0;
}
This does not work however, these two works:
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;
}
So I am trying to understand the reason and a possible solution for my problem
Your pointer is passed by value, and this code copies, then overwrites the copy. So the original pointer is untouched.
P.S. Point to be noted that when you do
point = "blah"
you are creating a string literal, and any attempt to modify is Undefined behaviour, so it should really beconst char *
To Fix - pass a pointer to a pointer as @Hassan TM does, or return the pointer as below.
Here:
int main() { char * point; ptrch(point);
You're passing
point
by value. Then,ptrch
sets its own local copy ofpoint
to point to"asd"
, leaving thepoint
inmain
untouched.A solution would be to pass a pointer to
main
'spoint
:void ptrch(char **pp) { *pp = "asd"; return; }
If you change the value of the pointer in a function, it will remain changed only in that one function call. Don't mess your head with pointers and try:
The same with your pointer. You do not change the address it points to.
If you assign to a variable passed by value, the variable outside the function will remain unchanged. You could pass it by a pointer (to pointer) and change it by dereferrencing it and it's the same with an int - in this case, it doesn't matter if the type is int or char * .
This should work since pointer to the char pointer is passed. Therefore any changes to the pointer will be seen outside thereafter.
first declare funtion......like this
next write main code.....