64,654
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <cstring>
int main()
{
FILE *fp = fopen("E:\\111.txt", "w");
if (!fp)
{
printf("Save failed.");
return 0;
}
int val = 1306;
unsigned char buf[6] = { 0 };
memcpy(&buf[1], &val, sizeof(int));
fwrite(buf, sizeof(char), 6, fp);
fclose(fp);
fp = fopen("E:\\111.txt", "r");
if (!fp)
{
printf("Open failed.");
return 0;
}
char c = 0;
int rval = 0;
int ret1 = fread(&c, 1, 1, fp);
int ret2 = fread(&rval, 4, 1, fp);
printf("%d %d %d %d\n", ret1, ret2, feof(fp) ? 1 : 0, ferror(fp) ? 1 : 0);
printf("%d %d\n", c, rval);
fclose(fp);
return 0;
}
1 1 0 0
0 1306
说明读的时候并没有到文件末尾,因为写的时候其实是写了6个字节,但是读的时候读了5个字节,所以不到文件末尾;
当读第7个字节时,此时就会提示EOF
稍微修改的代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
int main()
{
FILE *fp = fopen("111.txt", "w");
if (!fp)
{
printf("Save failed.");
return 0;
}
int val = 1306;
unsigned char buf[6] = { 0 };
memcpy(&buf[1], &val, sizeof(int));
fwrite(buf, sizeof(char), 6, fp);
fclose(fp);
fp = fopen("111.txt", "r");
if (!fp)
{
printf("Open failed.");
return 0;
}
char c = 0, c1 = 0, c2 = 0;
int rval = 0;
int ret1 = fread(&c, 1, 1, fp);
int ret2 = fread(&rval, 4, 1, fp);
int ret3 = fread(&c1, 1, 1, fp);
int ret4 = fread(&c2, 1, 1, fp);
printf("%d %d %d %d %d %d\n", ret1, ret2, ret3, ret4, feof(fp) ? 1 : 0, ferror(fp) ? 1 : 0);
printf("%d %d %d\n", c, c1, rval);
fclose(fp);
return 0;
}
结果如下:
1 1 1 0 1 0
0 0 1306
因为我是在Linux下操作的,所以结果仅供参考~