C语言字符串

本文详细介绍了C语言中处理字符串输入输出的三种方法:gets()、fgets()和gets_s()。gets()函数从标准输入读取字符串直到遇到换行符,但可能导致缓冲区溢出;fgets()通过指定读取的最大字符数避免溢出,同时保留换行符;gets_s()是安全的字符串读取函数,当输入超过指定长度时会停止读取并处理剩余输入。了解这些函数的特性和使用场景对于编写安全的C语言程序至关重要。
摘要由CSDN通过智能技术生成
一、表示字符串和字符串I/O

字符串是以空字符(\0)结尾的插入类型数组。
字符串常量属于静态储存类别。
字符串储存在静态储存区。

1、字符串数组

char *str[4];

二、字符串输入

输入字符串首先要分配空间。输入的长度应该是字符串的的长度(一些较老的版本,是输入的长度应该是字符串的的长度+1,‘+1’是给字符串结束符空字符(\0)预留的)。

1、gets()函数(和puts())

gets()读取郑航输入,知道遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符的结尾添加一个空字符十七成为一个C字符串。经常和puts()配合使用。
gets函数只知道数组的开始处,并不知道数组中有多少个元素,如果输入的字符串过长,会导致缓冲区溢出,及多余的字符超出了指定的目标空间。
下面是正常的gets()

#include <stdio.h>

int main()
{
        char ch[100 + 1]; 

        puts("Enter a string, please:");    
        gets(ch);
        printf("%s\n", ch);
        printf("------------------\n");
        puts(ch);
    
        return 0;
}

在这里插入图片描述
下面是正常的gets()输入的字符串长度大于定义的字符串长度

#include <stdio.h>


int main()
{
        char ch[3 + 1]; 

        puts("Enter a string, please:");    
        gets(ch);
        printf("%s\n", ch);
        printf("------------------\n");
        puts(ch);
    
        return 0;
}

在这里插入图片描述

2、fgets()函数(和fputs())

fgets()函数通过第二个参数限制读入的字符数解决溢出的问题。
1、fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数是n,那么fgets()读取的就是n-1个字符,或者读到遇到的一个换行符为止。
2、如果fgets()读到一个换行符,会把他储存在字符串中。这点与gets()不通,gets()会丢弃掉换行符。
3、fgets()函数的第三个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,改标识符定义在stdio.h中。

fgets()函数通常和fputs()搭配使用。fgets()函数的第二个参数要指明它写入的文件。如果现实在计算器显示器上,应使用stdout(标准输出)作为该参数。
fgets()返回的是字符指针,内容是输入的内容。

#include <stdio.h>

#define SIZELEN 8

int main()
{
        char ch[SIZELEN];
    
        puts("Enter a string, please.");
        fgets(ch, SIZELEN, stdin);
        printf("printf:----------------------\n");
        printf("%s", ch);
        printf("fputs:----------------------\n");
        fputs(ch, stdout);
        printf("put:----------------------\n");
        puts(ch);
        printf("----------------------\n");
    
        return 0;
}

在这里插入图片描述

3、gets_s()函数

get_s(ch, length);
1、get_s()只从标准输入中读取数据,所以不需要第三个参数。
2、如果gets_s读到换行符,会丢弃它而不是储存它。
3、如果gets_s()读到最大字符都没有读取到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或你选择的其他函数),可能会终止或退出程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值