【C语言_字符函数和字符串函数_复习篇】

目录

一、字符函数

        1.1 字符分类函数

        1.2 字符转换函数

二、字符串函数 

        2.1 strlen函数

                2.1.1 strlen函数的使用

                2.1.2 strlen函数的模拟实现

        2.2 strcpy函数

                2.2.1 strcpy函数的使用

                2.2.2 strcpy函数的模拟实现

        2.3  strcat函数

                2.3.1 strcat函数的使用

                2.3.2 strcat函数的模拟实现

        2.4 strcmp函数

                2.4.1 strcmp函数的使用

                2.4.2 strcmp函数的模拟实现

        2.5 strncpy函数

        2.6 strncat函数

        2.7 strncmp函数

        2.8 strstr函数

                2.8.1 strstr函数的使用

                2.8.2 strstr函数的模拟实现 

        2.9 strtok函数

        2.10 strerror函数


一、字符函数

1.1 字符分类函数

1. 字符分类函数就是用来判断字符属于什么类别的一些库函数,使用这些函数所要包含的头文件都是 <ctype.h>

2. 这些库函数的参数和返回类型都是一样的格式:int 名称( int c )。

3. 如果判断为真,则返回非零的值,如果判断为假,则返回0 

函数

如果参数符合下列条件就返回真

isupper

判断是否为大写字母

Islower

判断是否为小写字母

Isalpha

判断是否为字母

Isdigit

判断是否为十进制字符0~9

Isalnum

判断是否为字母或数字0~9

Isblank

判断是否为空字符

Isprint

判断是否为可打印字符

Isspace

判断是否为空格字符

Iscntrl

判断是否为控制字符

Isgraph

判断是否为图形字符

Ispunct

判断是否为标点符号字符

//练习:将一个字符串中的小写字母全部转换成大写字母
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "i am a student.";int i = 0;//下标while (str[i]){if (islower(str[i]))//如果str[i]是小写字母{str[i] -= 32;//先将str[i]转化为大写字母}putchar(str[i]);//再输出i++;}return 0;
}

1.2 字符转换函数

1. C语言中提供了两个字符转换函数,分别是 toupper() 将小写字母转换成大写和 tolower() 将大写字母转换成小写,使用这两个函数所要包含的头文件也 <ctype.h>

2. 字符转换函数和字符分类函数的参数和返回类型都是一样的格式:int 名称( int c )

     例如:int tolower(int c)、int toupper(int c)。

3. tolower函数逻辑:如果 c 是大写字母并且具有小写等效字母,则返回等效的小写字母的值,如果无法进行此类转换,则返回的值为 c 不变。

4. toupper函数逻辑:如果 c 是小写字母并且具有大写等效字母,则返回等效的大写字母的值,如果无法进行此类转换,则返回的值为 c 不变。

5. 传递给字符转换函数的参数本身的值是不会变的,字符转换函数只是实现字母的"变装"

//练习:将一个字符串中的小写字母全部转换成大写字母
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "i am a student.";int i = 0;//下标while (str[i]){putchar(toupper(str[i]));//将转换后的结果直接输出i++;}return 0;
}

二、字符串函数 

2.1 strlen函数

2.1.1 strlen函数的使用

1. strlen函数是专门用来计算字符串长度的函数,统计的是该字符串中\0之前的字符个数

2. strlen函数的参数是char*类型的指针返回类型是size_t类型的值(unsigned int)。

    size_t strlen(const char* str);

3. strlen函数所要包含的头文件是<string.h>

4. strlen函数计算字符串长度的逻辑:从函数所得到的参数,即指针str中的地址开始统计,如果str所指向的字符不是\0,统计的个数就+1。

5. 用strlen函数求的字符串长度之间不能直接比大小,因为无符号整型进行运算结果仍然会是无符号整型,如果想要直接比大小,请先把strlen求得的返回值转换成int类型

//strlen函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "hello";//5//char arr[] = { 'h', 'e', 'l', 'l', 'o' };//?//char arr[] = { 'h', 'e', 'l', 'l', 'o', '\0' };//5size_t len = strlen(arr);printf("%zd\n", len);return 0;
}
//用strlen函数求的字符串长度之间不能直接比大小,
//因为无符号整型进行运算结果仍然会是无符号整型,
//如果想要直接比大小,请先把strlen求得的返回值转换成int类型
#include <stdio.h>
#include <string.h>
int main()
{if (strlen("abcd") - strlen("abcdefg") > 0)//计算结果将是一个很大的正数{printf("hehe\n");//结果打印hehe}else{printf("haha\n");}//if ((int)strlen("abcd") - (int)strlen("abcdefg") > 0)//{//	printf("hehe\n");//}//else//{//	printf("haha\n");//结果打印haha//}return 0;
}

2.1.2 strlen函数的模拟实现

#include <stdio.h>
#include <assert.h>//写法一:计数器统计不是\0的字符
size_t my_strlen1(const char* ptr)
{assert(ptr != NULL);size_t count = 0;while (*ptr != '\0'){count++;ptr++;}return count;
}//写法二:指针 - 指针
size_t my_strlen2(const char* ptr)
{assert(ptr != NULL);const char* p = ptr;while (*p != '\0'){p++;}return p - ptr;
}//写法三:函数递归
size_t my_strlen3(const char* ptr)
{assert(ptr != NULL);if (*ptr == '\0'){return 0;}else{return 1 + my_strlen3(ptr + 1);//别ptr++}
}int main()
{char arr[] = "hello";size_t len = my_strlen3(arr);printf("%zd\n", len);return 0;
}

2.2 strcpy函数

2.2.1 strcpy函数的使用

1. strcpy函数是专门用来将一个字符串里的内容(包含\0)拷贝至另一个字符串中的函数。

2. strcpy函数的参数有两个,第一个是目标字符串的首地址第二个是源字符串的首地址返回类型是char*类型(目标字符串的首地址)。

    char* strcpy(char* destination, const char* source);

3. strcpy函数所要包含的头文件也是<string.h>

4. strcpy函数的实现逻辑:先定义一个指针p存放目标数组首元素的地址(即将函数第一个指针赋值给指针p),再将函数的第二个参数(存放源数组首元素地址的指针)一直至后面源数组中存放\0地址所指向的字符,依次传给目标数组首元素地址及之后的地址所指向的空间,实现拷贝操作,最后返回指针p。

5. 注意点:①源字符串必须以 '\0' 结束⽬标字符串的数组必须⾜够⼤,以确保能存放源字符串⽬标空间必须可修改(例如,不能是常量字符串的空间)

//strcpy函数的使用
//练习:将一个字符串拷贝至另一个字符串中
#include <stdio.h>
#include <string.h>
int main()
{char dest[] = "hello world!";char src[] = "abcde";char* p = "good night";//strcpy(p, dest);//errstrcpy(dest, src);//实现拷贝printf("%s\n", dest);//拷贝完后想看效果直接打印dest数组即可//printf("%s\n", strcpy(dest, src));//或将上面两行直接写成一行//因为strcpy的返回值就是dest数组首元素的地址return 0;
}

2.2.2 strcpy函数的模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* src)
{assert(dest && src);//NULL==0char* p = dest;while (*dest++ = *src++)//先参与*再++,虽++的优先级比*高,但这里是后置++{;}return p;
}int main()
{char arr1[20] = "hello world!";//保证dest空间足够,存放拼接后的字符串char arr2[] = "abcde";printf("%s\n", my_strcpy(arr1, arr2));return 0;
}//① NULL本质是0,一般用于指针初始化
//② \0 是\ddd形式的转义字符,本质也是0
//③ 文本中的null或NUL是\0的意思
//④ ‘0’ 是字符0,本质是48

2.3  strcat函数

2.3.1 strcat函数的使用

1. strcat函数是专门用来将一个字符串里的内容(包含\0)拼接至另一个字符串后的函数。

2. strcat函数的参数有两个,第一个是目标字符串的首地址第二个是源字符串的首地址返回类型是char*类型(目标字符串的首地址)。

    char* strcat(char* destination, const char* source);

3. strcat函数所要包含的头文件也是<string.h>

4. strcat函数的实现逻辑:先定义一个指针p存放目标数组首元素的地址(即将函数第一个指针赋值给指针p),再找到目标数组中的\0的地址,接着将函数的第二个参数(存放源数组首元素地址的指针)一直至后面源数组中存放\0地址所指向的字符,依次传给目标数组\0所在的地址及之后的地址所指向的空间,实现拼接操作,最后返回指针p。

5. 注意点:①源字符串和目标字符串中必须都要以 '\0' 结束⽬标字符串数组必须⾜够⼤,以确保能存放源字符串⽬标空间必须可修改(例如,不能是常量字符串的空间)④不要让字符串自己给自己拼接,因为在拼接的过程中源字符串中的字符会从目标字符串中的\0开始拼接,这样在自己给自己拼接时字符串里将没有\0,会造成无限凭借,直至程序崩溃。

//strcat函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[20] = "hello ";char arr2[] = "world!";printf("%s\n", strcat(arr1, arr2));return 0;
}

2.3.2 strcat函数的模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* p = dest;while (*dest != '\0')//使dest指针内的地址是\0的地址{dest++;}while (*dest++ = *src++){;}return p;
}int main()
{char arr1[20] = "hello ";//保证dest空间足够,存放拼接后的字符串char arr2[] = "world!";printf("%s\n", my_strcat(arr1, arr2));return 0;
}

2.4 strcmp函数

2.4.1 strcmp函数的使用

1. strcmp函数是专门用来比较两个字符串大小的函数。

2. strcmp函数的参数有两个,两个参数的内容分别是需要比较的两个字符串的首地址返回类型是int类型,字符串1>字符串2返回大于零的数,字符串1<字符串2返回小于零的数,字符串1等于字符串2返回0。

    int strcat(const char* str1, const char* str2);

3. strcmp函数所要包含的头文件也是<string.h>

4. strcmp函数的实现逻辑:将参数1和参数2两个指针所指向数组中元素一个一个对应进行比较它们的ASCII码值,如果字符相等且等于\0就返回0,如果字符相等且不等于\0就继续进行下一个字符的比较,如果参数1中字符ASCII码值大于参数2中字符的ASCII码值,则返回大于0的值,如果参数1中字符ASCII码值小于参数2中字符的ASCII码值,则返回小于0的值。

//strcmp函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "abcdefg";char arr2[] = "abcd";int ret = strcmp(arr1, arr2);if (ret > 0){printf("arr1>arr2\n");}else if (ret < 0){printf("arr1<arr2\n");}else{printf("arr1==arr2\n");}return 0;
}

2.4.2 strcmp函数的模拟实现

#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* p1, const char* p2)
{assert(p1 && p2);while (*p1 == *p2){if (*p1 == '\0'){return 0;}p1++;//和strcpy和strcat的区别,p2++;//此处是希望当*p1!=*p2时后面是比较的此时的值,而不希望++后比较后面的值}return p1 - p2;
}int main()
{char* p1 = "abcdegf";char* p2 = "hello";int ret = my_strcmp(p1, p2);if (ret > 0){printf("arr1>arr2\n");}else if (ret < 0){printf("arr1<arr2\n");}else{printf("arr1==arr2\n");}return 0;
}

2.5 strncpy函数

1. char * strncpy ( char * destination, const char * source, size_t num );

2. strncpy函数是在strcpy函数的基础上改良的(即strcpy的条件,strncpy都要满足),可以自定义从源字符串到⽬标字符串拷⻉的字符个数

3. 当num小于源字符串个数时,拷贝的内容并不会自动添加\0,如果num等于源字符串个数时,则和strcpy函数的效果一样,如果num大于源字符串个数时,则拷⻉完源字符串后,会在⽬标字符串的后边追加\0,直到满足num个

2.6 strncat函数

1. char * strncat ( char * destination, const char * source, size_t num );

2. strncat函数是在strcat函数的基础上改良的(即strcat的条件,strncat都要满足),可以实现从从源字符串到⽬标空间自定义拼接的字符个数(注意不管拼接几个字符都会自动添加\0,因为在进行拼接时,源字符串的字符会将目标字符串中末尾的\0覆盖掉)。

3. 当num小于源字符串个数时,拼接的内容并会自动添加\0,如果num等于源字符串个数时,则和strcat函数的效果一样,如果num大于源字符串个数时,则拼接完源字符串后,不会在⽬标字符串的后边追加\0

2.7 strncmp函数

1. int strncmp ( const char * str1, const char * str2, size_t num );

2. strncmp函数是在strcmp函数的基础上改良的(即strcmp的条件,strncmp都要满足),可以实现⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果发现比较的字符大小不⼀样,就会返回大于0或小于0的结束,如果num个字符都相等,就是相等返回0。

//strncmp函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "abcdef";char arr2[] = "abchhh";printf("%d\n", strncmp(arr1, arr2, 3));//前三个字符都是相等的所以返回0printf("%d\n", strncmp(arr1, arr2, 4));//在第4个字符中h大于d所以返回-1return 0;
}

2.8 strstr函数

2.8.1 strstr函数的使用

1. strstr函数是专门用来寻找字符串1中字符串2第一次出现的位置的函数。

2. strstr函数的参数有两个,分别是字符串1和字符串2的首地址,返回类型是char*类型(字符串2在字符串1中第一次出现的地址)

    char * strstr ( const char * str1, const char * str2);

3. strstr函数所要包含的头文件也是<string.h>

4. 如果在str1中不能找到str2会返回一个NULL,所以在使用strstr函数的返回值时,要先判断一下是否为空指针

5. 在字符串1中寻找时不会比较字符串2中的\0是否也匹配。

//strstr函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "hello world!";char arr2[] = "world";char* p = strstr(arr1, arr2);if (p != NULL){printf("%s\n", p);//打印world!}else{printf("找不到\n");}return 0;
}

2.8.2 strstr函数的模拟实现 

#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1, const char* str2)
{const char* cur = str1;const char* s1 = NULL;const char* s2 = NULL;assert(str1 && str2);if (*str2 == '\0'){return (char*)str1;}while (*cur){s1 = cur;s2 = str2;while (*s1 && *s2 && *s1 == *s2){s1++;s2++;}if (*s2 == '\0'){return (char*)cur;}cur++;}return NULL;
}int main()
{char arr1[] = "hello world!";char arr2[] = "world";char* p = my_strstr(arr1, arr2);if (p != NULL){printf("%s\n", p);//打印world!}else{printf("找不到\n");}return 0;
}

2.9 strtok函数

1. strtok函数是专门将字符串拆分为标记的函数。

2. strtok函数的参数有两个,第一个参数是所要拆分的字符串首元素的地址,第二个参数是装有要被拆分字符串中用作分隔符字符的字符数组的首元素地址

    char * strtok ( char * str, const char * sep);

3. strtok函数所要包含的头文件也是<string.h>

4. strtok函数的实现逻辑:strtok函数通过第一个参数找到str中的第⼀个标记,并将该标记修改为成\0,同时记录当前查找到的位置和返回指向第一个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改,即使用前先拷贝一份要被拆分的数组。)当想要找到第二个或以上的标记时,则需要再次调用strtok函数并且第一个参数要写成NULL。

5. strtok函数中的第⼀个参数如果不为 NULL ,函数将找到str中第⼀个标记同时记录当前查找到的位置。 strtok函数的第⼀个参数如果为 NULL ,函数将在同⼀个字符串中从上次保存的位置开始,查找下⼀个标记。如果字符串中不存在更多的标记或\0时,则返回NULL指针。

//strtok函数的使用
#include <stdio.h>
#include <assert.h>
int main()
{char arr1[] = "zhangsan@163.com";char arr2[30] = { 0 };//替身strcpy(arr2, arr1);const char* p = "@.";char* s = NULL;for (s = strtok(arr2, p); s != NULL; s = strtok(NULL, p)){printf("%s\n", s);}return 0;
}

2.10 strerror函数

1. strerror函数是专门可以把错误码对应的错误信息的字符串首地址返回来的函数。

2. strerror函数的参数是int类型的错误码返回类型是char*类型错误码对应的错误信息的字符串首地址)。

3. strerror函数所要包含的头文件有两个<errno.h>和<string.h>

4. 补充:在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应的错误码,存放在errno中(每一次被调用函数发生错误后,errno中的错误码都会更新),⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

5. C语言是可以进行文件操作的,打开文件的函数是fopen返回参数是FILE*类型,如果文件打开成功,则返回一个地址,如果文件打开失败,则返回NULL。

//strerror函数的使用
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{FILE* pFile;pFile = fopen("unexist.ent", "r");//文件名+指令if (pFile == NULL){printf("Error opening file unexist.ent:%s\n", strerror(errno));//当我们在使⽤标准库中的函数的时候发⽣了某种错误,//就会将对应的错误码,存放在errno中//perror("Error opening file unexist.ent");}else{printf("读取成功\n");}return 0;
}

本篇已完结。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2871499.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于深度学习LSTM+NLP情感分析电影数据爬虫可视化分析推荐系统(深度学习LSTM+机器学习双推荐算法+scrapy爬虫+NLP情感分析+数据分析可视化)

文章目录 基于深度学习LSTMNLP情感分析电影数据爬虫可视化分析推荐系统&#xff08;深度学习LSTM机器学习双推荐算法scrapy爬虫NLP情感分析数据分析可视化&#xff09;项目概述深度学习长短时记忆网络&#xff08;Long Short-Term Memory&#xff0c;LSTM&#xff09;机器学习协…

ISIS默认层级实验简述

ISIS被划分为三个层级&#xff1a;Level 1、Level 2和Level 1-2。 默认情况下&#xff0c;ISIS路由器属于level 1-2,是指同时支持Level 1和Level 2的路由器。路由器既可以在同一个自治系统内部进行路由选择&#xff0c;也可以将路由信息传递到其他自治系统。 实验拓扑图&#…

C# 打开文件对话框(OpenFileDialog)

OpenFileDialog&#xff1a;可以打开指定后缀名的文件&#xff0c;既能单个打开文件也能批量打开文件 /// <summary>/// 批量打开文档/// 引用&#xff1a;System.Window.Fomrs.OpenFileDialog/// </summary>public void OpenFile(){OpenFileDialog dialog new Op…

execl/python读取数据库( Access、MySQL)

目录 一 、读取access数据库 &#xff08;一&#xff09;execl读取数据库 1.搜索ODBC&#xff08;注意自己的execl是64位还是32位&#xff09; 2.安装数据源的驱动程序 3.打开execl 4. 补充&#xff1a;选择数据源时&#xff0c;也可以直接在execl中选择数据源 &#xff…

如何实现队列和栈的转化(c语言)

文章目录 一.什么是栈二.什么是队列三.怎么把栈变成队列&#xff08;力扣&#xff09;四.怎么把队列变成栈&#xff08;力扣&#xff09;总结 一.什么是栈 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定权在表尾进行插入和删除操作的线性…

Git——本地使用详解

目录 Git1、开始版本控制1.1、初始化Repository1.2、使目录脱离Git控制 2、把文件交给Git管控2.1、创建文件后交给Git2.2、git add之后再次修改文件2.3、git add "--all"与"."参数区别2.4、把暂存区的内容提交到存储库里存档 3、工作区、暂存区与存储库3.1…

生成式AI竞赛:开源还是闭源,谁将主宰未来?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

C语言基础-内联函数在头文件中的定义

文章目录 前言inline关键字优点缺点使用注意 头文件中定义函数内联函数在头文件中的定义总结 前言 在软件开发过程中&#xff0c;大家可能很少会遇到inline关键字&#xff0c;也可能很少见到头文件中定义函数体。没有用过不代表不能了解&#xff0c;菜就多练&#xff01;哈哈哈…

从零开始搭建游戏服务器 第三节 Protobuf的引入并使用

目录 上一节问题答案公布本节内容Protobuf介绍正文在build.gradle引入protobuf编写proto并生成使用生成的proto来进行数据传输 总结 上一节问题答案公布 上一节我们创建了ConnectActor&#xff0c;并且使用ConnectActorManager和connectId将其管理起来。 并且我们在收到客户端…

【Twinmotion】Twinmotion导入UE5

步骤 1. 在虚幻商城中安装“Datasmith Twinmotion导入器插件” 安装“面向虚幻引擎的Twinmotion内容” 2. 打开虚幻引擎&#xff0c;在插件中搜索“twinmotion”&#xff0c;勾选如下两个插件&#xff0c;然后重启虚幻引擎 3. 打开Twinmotion&#xff0c;随便添加一个物体 导出…

腾讯云2核2G免费服务器申请流程,2024免费服务器入口

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

4.1_5 文件存储空间管理

文章目录 4.1_5 文件存储空间管理&#xff08;一&#xff09;存储空间的划分与初始化&#xff08;二&#xff09;存储空间管理——空闲表法&#xff08;三&#xff09;存储空间管理——空闲链表法&#xff08;1&#xff09;空闲盘块链&#xff08;2&#xff09;空闲盘区链 &…

VScode----debug调试python代码添加上额外命令(args)

这里写目录标题 问题描述问题解决 更多内容可以点击这里查看个人博客&#xff1a;个人博客 问题描述 在服务器上运行python代码时&#xff0c;总会添加上额外的参数一般是用jyputer或者终端直接加上命令&#xff0c;现在我在vscode调试远程代码的时候想要加上这些命令. 问…

DFL《384底丹 430万》 wf/df-udt/448/96/96/32预训练模型

384底丹430万迭代&#xff1a;点击下载 训练素材19万张来自于以下数据集&#xff1a; 【更新】DST全角度训练图集V3.1 WF512【2.6W张 6GB 】【人脸混合_WF】FFHQ女性人脸数据&#xff0c;预训练炼丹专用【金鱼基础模型库】用于补全SRC极限角度香港中文大学CelebA预训练集-WF5…

HarmonyOS NEXT应用开发—状态栏显隐变化

介绍 本示例介绍使用Scroll组件的滚动事件 onScroll 实现状态栏显隐变化。该场景多用于各种软件的首页、我的等页面中。 效果预览图 使用说明 加载完成后显示状态栏显隐变化页面&#xff0c;上下拖动屏幕&#xff0c;顶端状态栏出现显隐变化。 实现思路 在置顶位置使用sta…

Vue-router3.0版本跳转报错

1.路由创建之后发现控制台push路由跳转报错了 2.解决方法&#xff1a; //在router文件中添加 const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch(err > err) }3.解决了

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法&#xff0c;以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

Day67:WEB攻防-Java安全JNDIRMILDAP五大不安全组件RCE执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; GroovyRuntimeExecPr…

git如何回退版本reset和revert命令的区别

文章目录 git回退版本的方法使用reset回退使用revert回退 总结 git回退版本的方法 Git回退到某个版本有两种方法&#xff1a;reset和revert。 使用reset回退 git reset --hard <版本号>该命令将HEAD指针移动到指定的版本&#xff0c;并重置工作目录和暂存区的内容。这…

微信小程序Skyline模式自定义tab组件胶囊与原生胶囊平齐,安卓和ios均自适应

进入下面小程序可以体验效果&#xff1a; 至于原理的话&#xff0c;解释起来毕竟麻烦&#xff0c;各位可以看源码自己分析。其实很简单&#xff0c;就算计算布局。很多网上公布的布局&#xff0c;都不能正常自适应。在下这个是完美可以的 1、WXML <view class"weui…