C语言笔记——gets_s, fgets, puts函数

来源:互联网 发布:虚拟拍照软件 编辑:程序博客网 时间:2024/06/06 18:48

1. gets_s——相当于scanf

用法:

char ex[5];

gets_s(ex);  相当于   scanf("%s", ex);   // 一旦输入超过4字节(末尾的'\0'占去1字节)就会出错


2. fgets是gets_s和scanf的改进。

用法:

fgets(ex, 5, stdin);    // 从标准输入流中读取5字节(包括'\0')到数组ex中,超出就自动截断,不会出错。

但是fgets有一个缺点,看底部的C程序和下面5张结果图就明了了(第一行和第二行分别代表输入输出值):


缺点是:

算上'\0'和输入的字符数共占的内存,如果还剩空间,就会在'\0'前放入'\n',使得字符串的长度多1字节。

解决办法:

一、在GetStrLength函数定义里修改。

存在'\n'就退出,字符个数少加一次。即把C程序第11和12行取消注释。

二、 封装fgets。

把'\n'替换成'\0'。(注意写上头文件string.h,因为用到了strchr函数

// 封装fgets——参数1:接收字符串的字符数组,参数2:接收的字符总数void GetString(char[], int count);void GetString(char str[], int count){fgets(str, count, stdin);// 查找字符串str中首次出现字符\n的位置,返回首次出现\n的位置的指针// 如果str中不存在\n则返回NULL。char * find = strchr(str, '\n');if (find){*find = '\0';}}


3. puts——相当于printf

用法:

puts(ex);  相当于 printf("%s\n", ex);  // puts自带一个回车\n


C程序:

#include <stdio.h>// 返回传入字符串的长度int GetStrLength(char[]);int GetStrLength(char str[]){int count = 0;while (str[count] != '\0'){//if (str[count] == '\n')//break;    count++;}return count;}int main(){char ex[] = {'a', 'b', 'c', 'd', '\0'};fgets(ex, 5, stdin);puts(ex);int len = GetStrLength(ex);printf("字符串的长度为:%d\n", len);return 0;}