#include <stdio.h>
void ReadChar(FILE * fp){
	fgetc(fp);
}
void PutChar(FILE * fp){
	char c = getchar();
	fputc(c,fp);
	//printf("%d\t%d\n", c, (bool)feof(fp));
}
int main(){
	FILE * fp;
	fp = fopen("test", "r+");
	ReadChar(fp);
	PutChar(fp);
	fclose(fp);
	return 0;
}
运行前test里面为空
第一次运行输入1之后test内容为1
第二次运行输入2之后test内容还是为1
解决方案:40分
难倒本人了。研究半天才发现原因,这是VC特有的特征,在linux上结果会不一样, MSDN的帮助:
当指定 “r+”,”w+”, 或 “a+” 访问类型时,允许读取和写入。(文件将处于打开状态以进行“更新”。) 但是,当你从读取切换到写入时,输入操作必须遇到 EOF 标记。假如没有 EOF,必须使用对文件定位函数的干预调用。文件定位函数是 fsetpos、fseek 和 rewind。从写入切换到读取时,必须使用对 fflush 或文件定位函数的干预调用。
假如你检查fputc返回值,会发现第二次fputc其实是执行失败了,返回值为-1。
当指定 “r+”,”w+”, 或 “a+” 访问类型时,允许读取和写入。(文件将处于打开状态以进行“更新”。) 但是,当你从读取切换到写入时,输入操作必须遇到 EOF 标记。假如没有 EOF,必须使用对文件定位函数的干预调用。文件定位函数是 fsetpos、fseek 和 rewind。从写入切换到读取时,必须使用对 fflush 或文件定位函数的干预调用。
假如你检查fputc返回值,会发现第二次fputc其实是执行失败了,返回值为-1。