问我写了一个本应打开文件的例程
myfopen(char *filename, FILE *fp) { fp = fopen(filename, "r"); }但是当我像这样调用它时
FILE *infp; myfopen("filename.dat", infp);但infp变量在调用者中未能正确设置。
答C 语言中的函数总是接收其参数的副本,因此函数无法通过给参数赋值来将值“返回”给调用者。请参阅问题 4.8。
对于这个例子,一个修复方法是将myfopen改为返回一个FILE *:
FILE *myfopen(char *filename) { FILE *fp = fopen(filename, "r"); return fp; }并像这样调用它
FILE *infp; infp = myfopen("filename.dat");或者,让myfopen接受一个指向FILE *(一个指向 FILE 的指针的指针)FILE):
myfopen(char *filename, FILE **fpp) { FILE *fp = fopen(filename, "r"); *fpp = fp; }并像这样调用它
FILE *infp; myfopen("filename.dat", &infp);