fread读取失败
#include <iostream>#include <cstdio>
using namespace std;
int main()
{
FILE *in = fopen("data.in", "rb");
// if(in == NULL) cout << "FAIL"; else cout << "OK";
FILE *out = fopen("b.txt", "w");
int a;
int t = fread(&a, 4, 1, in);
for(int i = 9; i >= 1; i--) {
a = (a + 1) * 2;
}
for(int i = 1; i <= 10; i++) {
// fprintf(out, "%d\n", a);
}
cout << a << ' ' << t;
}
data.in里面只有一个数1,而且确定FILE *in是读取成功了的。但是,cout验证发现,a = 2686513, t = 1,也就是说,读取是失败的,请问我哪里错了? char a; ba21 发表于 2018-1-22 14:29
char a;
不好意思,还是不明白 Hermione 发表于 2018-1-22 15:47
不好意思,还是不明白
好吧,当我没说 #include <iostream>
#include <cstdio>
using namespace std;
int main(void)
{
int a;
FILE *in = fopen("data.in", "rb");
int t = fread(&a, 4, 1, in);
cout << a << ' ' << t;
return 0;
}
人造人 发表于 2018-1-22 20:14
还是不行哪,我在codeblocks上面跑,t还是显示为0 Hermione 发表于 2018-1-24 23:49
还是不行哪,我在codeblocks上面跑,t还是显示为0
#include <iostream>
#include <cstdio>
using namespace std;
int main(void)
{
int a;
FILE *in = fopen("data.in", "rb");
int t = fread(a, 4, 1, in);
cout << "0x" << std::hex << a << ' ';
return 0;
}
int t = fread(&a, 4, 1, in);
这句话的意思是从in中读取4个字节保存到 &a这个指针的位置。
1.首先你的a数组只有11个元素,也就是只有0-10这11个有效空间。&代表的是最后一个元素的当前空间地址位置。这样做的结果就是会把从in中读取的字节保存到最后一个元素中。但是,数组明明只有1个空间了,但你还非要往里面读4个元素。这样是会溢出的。
改成这样:int t = fread(&a, 1, 1, in);只从in中读取1个字符并赋值给a。t是返回的读取数。
还有,不管写啥,一定要在用完句柄后释放掉。你光打开文件,却不关闭文件。这种习惯很不好。要fclose。有始有终。
页:
[1]