如何解决为什么我可以从 C 语言中以“写入模式”打开的文件中“读取”?
我一直在用C语言测试文件操作功能。但是,我发现我可以读取一个以“写入模式”打开的文件,这不是我所期望的。
首先,我在 Windows 和编译器上通过 g++ 测试代码并发现这个奇怪的结果,然后我转向 Linux 并测试由 g++ 和编译器编译的相同代码结果就是我想要的!
谁能告诉我当我使用 fopen()、fread()、fwrite() 时 Windows 上发生了什么。
这是我的测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
**strong text**
int main(int argc,char*argv[]){
FILE *fp = fopen("123.txt","w");
char buf[50];
strcpy(buf,"hello world");
int n_read = 0;
int n_write = 0;
if(fp){
printf("file exist!\n");
n_write = fwrite(buf,1,strlen(buf),fp);
printf("write n: %d\n",n_write);
// fseek(fp,SEEK_SET);
// fflush(fp);
n_read = fread(buf,5,fp);
printf("read n : %d\n",n_read);
printf("buf Now : %s\n",buf);
}
else{
printf("error !\n");
return -1;
}
return 0;
}
Windows 上的结果
file exist!
write n: 11
read n : 5
buf Now :
在 Linux 上的结果
file exist!
write n: 11
read n : 0
buf Now : hello world
我注意到如果我在 Windows 测试中使用 fseek(fp,SEEK_SET);
或 fflush(fp);
,结果与 Linux 相同,这正是我所期望的,但我仍然不知道为什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。