//测试在一个整数的中间字节插入另一个整数会怎么样
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * file;
int a = 1;
int b = 2;
int c;
if ( ( file = fopen ( "bionary_test.txt","wb+") ) == NULL )
{
fprintf(stderr,"Open file failed.");
exit(1);
}
fwrite(&a,sizeof(int),1,file);
rewind(file); //指针一定要重置,不然是接着继续的
fread(&c,sizeof(int),1,file); //只能用二进制读取,不能用fscanf(),不知为何,会输出43
printf("%d\n%d\n",c,sizeof (int));
fseek(file,2L,SEEK_SET);
fwrite(&a,sizeof(int),1,file);
rewind(file);
fread(&c,sizeof(int),1,file);
printf("%d\n",c);
fread(&c,sizeof(int),1,file);
printf("%d\n",c);
fseek(file,0L,SEEK_END);
c =ftell(file);
printf("%d\n",c);
return 0;
}
输出结果:
1
4
65537
65536
6
原本里面的数字是1,占用4个字节,应该前31位都为0,最后一位是1,我在第二个字节后面插入了数字2,结果现在里面有6个字节而不是8个字节,说明是从第二个字节开始覆盖住了后面的4个字节而不是添加了4个字节,但是即使这样,前4个字节也应该都是0,结果却输出了65537。
除此之外我又读了4个字节,但是里面只剩下2个字节了,但是却读取成功了,输出结果65536。请问是为什么
另外我如果用fscanf从文件中读取数字的话会读出43,也不知道是为什么
希望大家能为我解决疑惑