赞
踩
前言:大家好,这里是YY;此篇博客主要是字符串函数的知识点;包含【C语言对字符和字符串的处理】【strlen】【strcpy】【stract】【strcmp】【strcpy,strcmp,strcat与strncpy,strncmp,strncat比较】【strncpy】【strncmp】【strncat】【strstr】【strtok】【strerror】【perror】【字符分类函数】【字符转化函数】
PS:创作不易,每个知识点都有例题或者图帮助理解;如果对你有帮助,希望能够得到您的关注,赞,收藏,谢谢!
目录
六.strcpy,strcmp,strcat与strncpy,strncmp,strncat比较
C语言中对字符和字符串的处理很是频繁,但是C语言本身并没有字符串类型,字符串通常放在常量字符串或者字符数组中。
PS:字符串常量适用于那些对它不做修改的字符串函数
常量字符串:
"hello my friend! \0"//默认后面会有\0
字符数组:
char arr[]="welcome to my blog! \0";//默认后面会有\0
#include<string.h>
特性:
- strlen的返回类型是unsigned int
- 无符号数-无符号数还是无符号数
使用场景:
原理:指针-指针
注意点:const修饰的指针到另一个指针时,也应该受保护(+const)
注意:返回类型为char*,打印时可以接受其返回值
使用场景:
如果不拷贝\0会报错(越界)
(虽然能成功拷贝,但仍然会报错)(要保证目标空间足够大·)
前提条件:(目标指针指向的空间必须可修改)
原理:逐个改变目的地的地址,即指针(地址)覆盖
PS:与strcpy类似,参数部分都是前目的地,后源。
使用场景:
特性:
追加字符串时,源字符串必须有\0
- 会覆盖待追加代码的\0(从第一个\0处开始追加)
比模拟实现strcpy多了一步:设置cur指针,重新找拼接的头指针(覆盖掉源代码的\0)
分析:
- stract的特性之一就是会覆盖待追加代码的"\0"
注意点:
比较对应位置上字符的Ascall值的大小
一定要有‘\0’,即终止符号
与字符串的长短无关 !!!!!!!!!!!!
使用场景:
原理:逐字符比较
直观区别:
- 长度受限制的字符串函数
- 长度不受限制的字符串函数
PS:strncpy,strncat不仅是长度受限与否的区别,还有特性上的区别
应用场景:
strncpy特性:不够拷贝的部分,补上" \0"
运用场景:
PS:与strcmp对比,解决了无法自己追加自己的问题
特性:
- strncat追加的字符串后面还是有\0
- 追加的个数n,不包含\0
原理:
strncat追加的字符串后面还是有\0,---解决了\0被覆盖从而无法读取的情况
运用场景:
返回值的情况:
- 存在:返回子串第一次出现的位置
- 不存在: 返回NULL
使用场景:
原理:分别设置两个比对指针s1,s2,设置一个指针p记录开始匹配的位置
代码实现:
PS: str 为待分解字符串,delim 为分隔符(也为字符串)
返回值:
- 该函数返回被分解的第一个子字符串
- 如果没有可检索的字符串,则返回一个空指针(str!NULL即可控制循环)
- 存储分割符的字符串p,分割一次后会自动跳到下一个字符
- strtok有记忆功能,会记住他改变的地址
- 第一次如果传回非空,则第二次一定要传回NULL!!!!!!!!!!!!!
(第一次传入非空,将会从str中找到第一个分隔符处的位置,并记忆;第二次传入NULL,是为了确保函数从第一次操作中记忆的位置再次开始运行,寻找下一个标记)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<ctype.h> #include<string.h> int main() { char arr[] = "yy@qq.com"; char buf[200] = { 0 }; strcpy(buf, arr); const char* p = "@."; char* str = NULL; //第一次传入buf为非空,则接下来在此循环一定要传入NULL for (str = strtok(buf, p); str != NULL; str = strtok(NULL, p)) { printf("%s\n", str); } return 0; } 输出结果: yy com
错误码:0,1,2,3,4(C语言中库函数报错时的错误码)
功能:接收错误码并把错误码转换成错误信息
PS:errno是c语言提供的全局的错误变量,当调用时,错误码就会存进去
应用场景:
要点:
相当于printf与strerror的结合
可以加入自定义内容
使用场景:
#include<ctype.h>
返回值:非数字字符返回0;数字字符返回非0;
使用场景:
#include<ctype.h>
返回值:
- toupper;返回转换后的大写字母,若不须转换则将参数c值返回。
- tolower;返回转换后的小写字母,若不须转换则将参数c值返回。
运用场景:
- int main()
- {
- char arr[] = "Hello";
- char* p = arr;
- while (*p++)
- {
- //把所有字符先变成小写,再变成大写
- if (islower(*p))
- {
- *p = toupper(*p);
- }
- }
- printf("%s", arr);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。