前言

  • 当我们进行字符串输入时,scanf函数和转换说明%s只能读取一个单词。所以,要进行整行输入,需要用到gets

  • puts()一定要是字符串,即最后需要有’\0’

函数

gets()

  1. 参数
    (字符数组地址)

  2. 说明
    遇到’\n’结束,丢弃’\n’,在最后加上’\0’。这使得gets()可以于puts()有很好的配合

  3. 缺点
    缓冲区溢出,破坏栈中的内容。
    当我们传入字符串数组的首地址时,gets只知道元素的开始处。这样会导致缓冲区溢出。它在遇到 EOF 字符或换行字符之前,不会停止读入文本。也就是:gets() 根本不执行边界检查。因此,使用 gets() 总是有可能使任何缓冲区溢出。

puts()

  1. 参数
    (字符数组地址)

  2. 说明
    遇到’\0’结束,并且在最后加上’\n’

示例

逐个字符输入,pus()要加上'\0'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main()
{
char str1[] = "we are learning C language.";
char str2[40] = "we are learning C language.";
char str3[40];
int i = 0;

while((str3[i] = getchar()) != '\n')
i++;
str3[i++] = '\0';

puts(str3);
return 0;
}