好的,C语言中字符串的读入是一个基础但容易混淆的知识点。不同的函数有不同的特性,适用于不同的场景。我来为你系统地梳理一下,方便你做笔记。

核心概念:字符串在C语言中的存储

C语言没有真正的字符串类型,而是用字符数组来存储字符串,以空字符 '\0' 作为结束标志。任何读入操作都必须确保数组末尾有这个 '\0'


1. scanf 函数

scanf 是最常用的输入函数,但与字符串一起使用时需要特别注意。

a) 使用 %s 格式

b) 使用 %[^\n] 格式 (读取带空格的字符串)

c) 限制读取长度 (安全的方法)


2. gets 函数 (已废弃,绝对不要使用!)


3. fgets 函数 (推荐的读行方法)

这是读取整行字符串最安全、最标准的方法。


4. getchar 函数 (逐个字符读取)

用于需要精细控制输入流程的场景,例如自己实现一个读行函数。


总结与对比表

方法 能否读空格? 是否安全? 是否读取换行符? 适用场景
scanf("%s") 不能 不安全 不读取 读取单个单词
scanf("%[^\n]") 不安全 不读取 读取一行(不包含换行符)
gets 极不安全 读取但丢弃 绝对不要使用
fgets 安全 读取并存储 读取一行的首选方法
getchar 安全(取决于实现) 可控制 需要逐个字符处理的复杂输入

最佳实践建议

  1. 读取单个无空格的单词:使用 scanf限制长度,如 scanf("%9s", str)
  2. 读取一行包含空格的字符串总是使用 fgets
  3. 永远不要使用 gets
  4. 使用 fgets 后,如果不需要换行符,记得手动移除。
  5. 在调用 fgets 读取一行后,如果想再用 scanf,要注意清理输入缓冲区,因为 fgetsscanf 对换行符的处理方式不同,可能会互相干扰。

希望这份详细的笔记对你有帮助!