I need to pass in a char * in a function and have it set to a cstring value. I can properly set it as a string in the function, but it doesn't seem to print out correctly in the function that called the char * function in the first place.
int l2_read(char *chunk,int length)
{
chunk = malloc( sizeof(char) * length);
int i;
for(i = 0; i < length; i++){
char c;
if(read(&c) < 0) return (-1); // this gets a single character
chunk[i] = c;
}
printf("%s",chunk); // this prints fine
return 1;
}
// main
char *string;
int value = l2_read(string,16);
printf("%s",chunk); // prints wrong
You have to pass a pointer to a pointer.
In C, everything is passed by value. A general rule to remember is, you can't change the value of a parameter passed to a function. If you want to pass something that needs to change, you need to pass a pointer to it.
So, in your function, you want to change
chunk
.chunk
ischar *
. To be able to change the value of thechar *
, you need to pass a pointer to that, i.e.,char **
.and then in
main()
:Pass-by-value in C is the reason why
strtol()
,strtod()
, etc., needchar **endptr
parameter instead ofchar *endptr
—they want to be able to set thechar *
value to the address of the first invalid char, and the only way they can affect achar *
in the caller is to receive a pointer to it, i.e., receive achar *
. Similarly, in your function, you want to be able to change achar *
value, which means you need a pointer to achar *
.Hope that helps.
I just re-read your question.
You seem to have been hit by the pass by value, even if it is a pointer, problem. Also, is chunk null terminated?
I totally agree with the answer posted above. You are essentially modifying the value of pointer so you need to pass the reference of pointer. use char ** instead of char*.