prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.27

我写了一个本应打开文件的例程

	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);


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管