结构类型处理复杂的数据
结构声明位于源文件的开头,相当于结构类型的全局声明
注意:读取或者写入某个文件,都要先打开文件
写入读出函数的参数类型,实参和形参的类型要对应;
上述:
& emp 得到一个指向结构类型的指针,或者说指向 struct employee 类型的指针
struct employee * pemp = & emp;
在程序相应的位置可以达成替换的作用
练习6.8
编写程序,将写入文件中的内容读到一个结构类型的变量中,并在调试器里观察读取的内容是否与前面写入的一致
注意:结构类型变量传入读出函数向其传入的参数的值 & 符号 变成指针的形式 sizeof 计算变量的字节数
struct employee * p = & copy1;
*read ( fd1, ©1 , sizeof copy1 ) ;
read ( fd1, p , sizeof p ) ;
read ( fd1, p , sizeof ( struct copy ) ) ; 三种等价的表达形式
练习6.9
利用重定向功能,1. 将键盘输入的内容写入文件 out1 .txt ;
2. 将文件myfile.txt 的内容打印到屏幕上。
看清上面的箭头方向,前面是将输入的内容 转到 out1 . txt 文件中 (输入重定向)
下面是将文件中的内容给程序中的输入,达到文件中的内容可以在控制台屏幕上显示的效果,为输出重定向
在同一条语句中同时使用输入输出重定向,可以达到文件复制的功能
练习 6.10
具体题目见书
可以独立解答问题了,不错,继续加油!!哈哈哈哈
两个数组之间不能进行赋值操作,但是,可以把数组作为结构变量的成员,
则可以利用结构之间的赋值操作来突破这一限制。
结构体成员变量赋值:
使用函数 StringCchCopy ( 结构类型变量 . 成员, size_t cchDest, const char * );
头文件 < strsafe. h >
第二个参数用于指定目标缓冲区的大小,该函数之所以安全,是因为可以指定目标缓冲区的大小以防溢出( 写操作越界 )
第三个参数 用于指定源字符串,也就是需要给成员数组赋值的字符串,一般会执行数组–指针转换
用法: StringCchCopy (emp.name, sizeof emp.name, “HuoFengrong”);
6.7.2 复合字面值
在创建或者以写模式打开一个文件后,就可以写入内容了,要写入一个文件,可以使用函数 WriteFile
WriteFile (hf, & emp, sizeof emp, & (DWORD) {0}, 0);
五个参数;
第一个参数是创建或者打开一个文件后 : 返回的文件描述符
第二个参数是指向缓冲区的指针
第三个参数是写入的字节数
第四个参数是已经写入的字节数