C语言输入输出之printf_s()函数详解
1. 输入循环处理
在程序中,有一个循环会持续执行,直到当前字符为换行符。每次循环迭代时,程序期望读取一个整数或者一个名称。循环首先会调用 getinteger()
函数尝试读取整数,如果未找到整数,该函数返回 false
,此时会调用 getname()
函数读取名称。若也未找到名称,说明输入既不是名称也不是整数,程序会输出一条消息后结束。
2. 屏幕输出概述
向屏幕的命令行写入数据比从键盘读取输入要容易得多。因为写入时你清楚要写的数据,而读取输入时可能会遇到各种错误输入的情况。格式化输出到标准输出流的主要函数是 printf()
,你可能已经广泛使用过它。 stdio.h
头文件可能还会声明可选的 printf_s()
函数,它是 printf()
的安全版本。两者的主要区别在于, printf_s()
不允许在格式字符串中包含 %n
输出规范,因为 %n
会向内存写入数据,存在安全风险。通过不接受 %n
作为有效格式规范, printf_s()
确保了格式字符串被恶意篡改时不会被处理。后续代码将使用 printf_s()
,若系统不支持,也可使用 printf()
。使用时,需在包含库头文件的 #i