Code Bye

[新手求帮助]下面这段代码第二次运行的结果为什么会是1!!

#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。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明[新手求帮助]下面这段代码第二次运行的结果为什么会是1!!