标准 I/O 库与文件系统详解
1. 标准 I/O 库的格式化输入输出注意事项
在标准 I/O 库中,使用 “%s” 进行转换时,字段宽度的使用可能与预期不同。很多程序员认为 “%12s” 会读取字符串的前 12 个字符,而不管字符串的实际长度。但实际上,“%s” 只将空白字符视为字段终止符,所以并非如此。若要实现读取指定长度字符的需求,应使用 “%12c”,不过要注意 “%c” 不会添加终止空字符。
此外,还可以使用星号字符(‘*’)代替字段宽度。与 printf 中的星号(用于指示字段宽度应从参数获取)不同,这里的星号表示在输入中跳过该字段,而不将其赋值给变量。
在移植方面,只要遵循相关转换规则, printf 和 scanf 函数在各平台上基本是标准的,唯一的例外是 “%i” 转换,它是 ANSI C 特有的。还有一些不太常用的转换规范和修饰符,在 ANSI C 标准中被引入,具体可查看特定 UNIX 版本的手册页,为了保证可移植性,不建议在代码中使用这些不太通用的转换和修饰符。
2. 读写偏移量的重新定位
操作系统为每个文件关联的一个重要值是读写偏移量,也称为文件偏移量。它指定了从文件开头起的字节“距离”,即下一次读写操作将发生的位置。当文件首次打开或创建时,文件偏移量为零(除非以追加模式打开),首次读写操作将从文件开头开始。随着读写操作的进行,偏移量会根据每次读写的字节数递增。每个文件只有一个读写偏移量,例如,先读取 10 个字节,再写入 20 个字节,读写偏移量将变为 30。
标准 I/O 库提供了三个主要函数来操作
超级会员免费看
订阅专栏 解锁全文
7398

被折叠的 条评论
为什么被折叠?



