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;
}