首页 > 系统相关 >Linux & 标准C语言学习 <DAY13>

Linux & 标准C语言学习 <DAY13>

时间:2023-03-14 16:44:25浏览次数:72  
标签:char const 字符 C语言 学习 字符串 Linux 缓冲区 输入

一、字符串     字符:类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号     串:是一种数据结构,存储类型相同的若干个数据,对于串型结构的处理是批量性的,会从头开始直到遇到结束标志停止     字符串:由字符组成的串行结构,结束标志是 '\0'
    1、字符串的存在形式         1.字符数组:char str[10] = {'a','b',...};             由char组成的数组,注意要为'\0'预留位置,初始化麻烦             存储在栈内存中,数据可以修改
        2.字符串字面值:"由双引号包含的若干个字符"             末尾会隐藏一个'\0',定义也方便             存储在text段中, 是常量,不能修改
        *常用方式:字符数组[] = "字符串字面值";             会自动为'\0'预留位置             注意:赋值完成后,该字符串在内存中有两份
    2、字符串的输入和输出         1.输入             scanf(%s,地址);                 缺点:不能输入空格
            char *gets(char *s);                 功能:输入字符到s中                 返回值:s 链式调用                 缺点:输入的长度不受限制,会产生警告
            char *fgets(char *s, int size, FILE *stream);                 功能:输入长度最多为size-1个字符串,会自动为'\0'预留位置,超出部分不接受,不足时最后的'\n'也会一起接收                 返回值:s 链式调用
        2.输出             printf(%s,地址);
            int fputs(const char *s);                 功能:输出一个字符串,并且会自动在末尾打印一个'\n'                 返回值:成功输出的字符个数
    3、输出缓冲区         *缓冲区机制可以提高数据的读取速度,还可以让低速的设备与高速的CPU协调工作         程序员要显示的数据并不会立即显示到屏幕上,而是先存储到输出缓冲区中,当满足一定条件时才会输出缓冲区显示到屏幕上             1.遇到'\n'             2.遇到输入语句             3.当缓冲区满4k             4.程序正常结束时             5.fflush(stdout);  //手动刷新输出缓冲区
    4、输入缓冲区         程序中输入的数据并不会立即从键盘接收到变量中,而是当按下回车后先存储到输入缓冲区中,然后再从缓冲区中读取到变量内存中             情况1:需要输入的是整数/浮点型时,而缓冲区中的数据是字符型时,此时读取会失败,并且该数据会继续残留在输入缓冲区中,会继续影响剩下的输入                 解决:根据scanf的返回值判断输入是否有问题,如果读取失败,则先清理输入缓冲区后重新输入,直到读取成功为止
            情况2:通过fgets可以指定读取size-1个字符,但是如果输入超过,则字符会残留在输入缓冲区中,会继续影响接下来的输入                 解决:                     方法一:scanf("%*[^\n]");scanf("%*c");  //从缓冲区中读取任意类型数据并丢弃,直到遇到'\n'停止;从缓冲区中读取任意字符类型并丢弃                     方法二:stdin->_IO_read_ptr = stdin->_IO_read_end  //把输入缓冲区的位置指针从当前位置移动到末尾,详单与清理输入缓冲区(Linux下)
            情况3:当先输入整型/浮点型,再输入字符型时,输入整型/浮点型后按下的回车或空格会残留在输入缓冲区,而被后面的字符型接收                 解决:在%c或者gets()前面加空格:scanf(" %c");
    5、字符串相关函数         #include <string.h>         size_t strlen(const char *s);             功能:计算字符串的长度,不包含'\0'                 char *strcpy(char *dest, const char *src);             功能:把src拷贝给dest,相当于赋值             返回值:dest的首地址  //链式调用
        char *strcat(char *dest, const char *src);             功能:把src追加到dest的末尾,相当于+=             返回值:dest的首地址  //链式调用
        int strcmp(const char *s1, const char *s2);             功能:比较两个字符串             返回值:s1 > s2 正数;s1 == s2 零;s1 < s2 负数
        char *strstr(const char *haystack, const char *needle);             功能:在haystack中查找是否存在字串needle             返回值:needle在haystack中第一次出现的位置,如果找不到返回NULL
        #include <stdlib.h>         int atoi(const char *nptr);             功能:字符串转int整型
        int atof(const char *nptr);             功能:字符串转double整型
        #include <stdio.h>         int sprintf(char *str, const char *format, ...);             功能:把各种类型的数据转换成字符串输入到str中
        int sscanf(const char *str, const char *format, ...);             功能:从str中解析出各种类型的数据,并存储带对应的变量中

标签:char,const,字符,C语言,学习,字符串,Linux,缓冲区,输入
From: https://www.cnblogs.com/phony/p/17215442.html

相关文章