c中的I/O流

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:13:43
学习MFC中的CFile时遇到下面的代码:
……
BYTE buffer[0x2000]
UINT nBytesRead=file.Read(buffer,sizeof(buffer));//??????
……

DWORD dwPosition=file.GetPosition();
buffer不是一个指针么sizeof(buffer)是什么?(按书中的意思是8KB)
还有,Read函数返回的被转换成UINT类型了么,可UINT是4字节的啊?

buffer是个数组,sizeof返回的是这个数组的总长度,GetPosition返回的是指针(4字节),Read返回的是实际读取的总长度.如果为0以为着读完了

buffer是一个BYTE(即unsigned char)型数组,个数为0x2000(16进制数,换成10进制为8192,即8乘1024,即8K)
buffer在file.Read中被强制转换为指针类型,以便将数据读入buffer数组中。
sizeof(buffer)是计算buffer数组的大小,结果为8192,即8K
Read函数返回值是读取数据的总长度。

sizeof在对数组操作的时候,返回的是数组的长度,在对指针操作的时候,返回的是一个int型变量的长度,也就是4个字节。
file.Read()这个函数的返回类型是UINT,也就是unsigned int,它和int一样,也都是4个字节,所不同的是,unsigned int的范围是0~(2^32-1),而int型的范围是-(2^16)~(2^16-1)。