C语言字符串

一、表示字符串和字符串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;
}

C语言字符串
下面是正常的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;
}

C语言字符串

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

C语言字符串

3、gets_s()函数

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

上一篇:C语言 文件读写 fgets 函数 - C语言零基础入门教程


下一篇:gets,puts,fgets