Q: I wrote this routine which is supposed to open a file:
myfopen(char *filename, FILE *fp) { fp = fopen(filename, "r"); }But when I call it like this:
FILE *infp; myfopen("filename.dat", infp);the infp variable in the caller doesn't get set properly.
A: Functions in C always receive copies of their arguments, so a function can never ``return'' a value to the caller by assigning to an argument. See question 4.8.
For this example, one fix is to change myfopen to return a FILE *:
FILE *myfopen(char *filename) { FILE *fp = fopen(filename, "r"); return fp; }and call it like this:
FILE *infp; infp = myfopen("filename.dat");Alternatively, have myfopen accept a pointer to a FILE * (a pointer-to-pointer-to-FILE):
myfopen(char *filename, FILE **fpp) { FILE *fp = fopen(filename, "r"); *fpp = fp; }and call it like this:
FILE *infp; myfopen("filename.dat", &infp);