大家好!
我在一本旧书中找到了编程练习:
“ a.txt 文件的内容为: 11 2 13 4 15 6 17 8 19 。我们在C中有以下程序在 b.txt 档案:
#include <stdio.h>
int main()
{
FILE *f, *g;
short int v[10];
f = fopen("a.txt", "r");
g = fopen("b.txt", "w");
fread(v, 8, 1, f);
fwrite(v, 6, 1, g);
fclose(f); fclose(g);
return 0;
}
我希望我的程序能够写下这些数字: 11 2 13 但相反,它写道: 11 2 1
我试着看看使用调试器的 v 数组会发生什么,但是 值显示与我的计算不符。
在调用fread()之前,v是未初始化的,如下所示: 6448 64 -108 96 6542 64 6448 64 68 0
fread()之后 函数完成后,调试模式下的v为: 12593 12832 12576 8243 6542 64 6448 64 68 0
我不再学习C了,但我很好奇fread()如何读取a.txt中的数字以及fwrite()如何将它们写入b.txt。我知道prototipes的功能以及它们通常如何工作,因为我用它们编写了一些小程序:
int fread(void *p, int dim, int n, FILE *f);
//reads n elements from f, each one having dim bytes and stores them in p
int fwrite(void *p, int dim, int n, FILE *f);
//writes n elements in f from p, each one having dim bytes
但在这种特殊情况下,我很困惑。我甚至试图将我的数组类型从 short int 更改为 int ,但结果是一样的。我检查了这本书, int 类型有4个字节,“short int”有2个字节,如果有帮助的话。
答案 0 :(得分:1)
好的fwrite如下(来自tutorialspoint):
size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream)
所以这一行
fwrite(v, 6, 1, g);
从“11 2 13 4 15 6 17 8 19”写入 6 个字节。不要忘记,这一行有空格。所以该函数写出了非常6的第一个char(因为几乎在每种情况下,char的大小都是1),它们是:
'1', '1', ' ', '2', ' ', '1'.