C语言字符串常用的输入、输出函数scanf()和printf()、gets()和puts()、fgets()和fputs()

时间:2021-01-18 01:51:12

最近在看C语言,这里总结一下有关字符串的输入和输出函数

1、gets()和puts()函数

首先gets()函数读取整行输入,直到遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符串的末尾添加一个空字符使之成为一个字符串,而puts()函数用来显示字符串,并在末尾添加换行符。但是gets()函数并不安全,它无法检查输入的字符串的长度,当输入的字符串过长的时候,会导致缓冲区溢出,

2、fgets()和fputs()函数

fgets()函数一共有三个参数,第一个用来存储输入的字符串,第2个参数指明了读入字符的最大数量,如果该参数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第一换行符为止。另外,fgets()读到一个换行符,会把它储存在字符串中,fgets()函数的第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,相应的fputs()函数就不会给字符串的末尾添加换行符,fputs()的第2个参数指明它要写入的文件,如果要显示在计算机屏幕上,应使用stdout(标准输出)作为参数。示例如下:
char words[7];
fgets(words,7,stdin);
fputs(words,stdout);
fgets()返回指向char的指针,如果一切顺利,该函数返回的地址与传入的第1个参数相同,但是如果函数读到文件结尾,它将返回一个特殊的指针:空指针(null pointer),该指针不会指向有效的数据,在代码中可以用数字0来代替,不过用宏NULL来代替更常见。由于fgets()储存了换行符,带来的好处是可以通过检测末尾是否有换行符来判断是否读取了一整行,如果不是要妥善处理一行中剩下的字符,不好的一点是要处理换行符,一个方法是在已储存的字符串中查找字符,并将其替换成空字符。
//处理换行符
while(words[i]!='\n)
  i++;
  words[i]='\0';
//丢弃缓存中的剩余字符,包含换行
while(getchar()!='\n')
    continue;

3、scanf()和printf()函数

scanf()函数比较简单,当使用%s参数的时候,它会在遇到第一个空白字符的时候结束输入,如果指定了字段宽度,它会在遇到空白字符的时候结束输入或者在读取到相应的字符数目的时候结束输入。