c语言——字符串处理函数

注意注意,用这个的时候加上#include<string.h>
要不然疯狂报错


strlen和sizeof–长度


strlen

用法:strlen(字符串数组符号)
解释:strlen 函数用于返回指定字符串的长度。
C 语言字符串的长度取决于结束符(’\0’)的位置。
一个字符串的长度指的是从起始位置到结束符的字符个数(不包含结束符‘\0’本身。
对于字符串的长度和字符串数组的大小开始的时候很容易混淆
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "123456789";//预设100个位置,这里有9个字符
	printf("%u", strlen(str1));//打印出来
}

结果:
在这里插入图片描述
温馨提示:size_t 被定义于 stddef.h 头文件中,它事实上就是无符号整形(unsigned int)。所以用%u

sizeof

用法:sizeof(字符串数组)
解释:字符串数组大小
上边代码定义一个可以存放 100 个字符的数组sizeof(mystr) 的结果是 100
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "123456789";//预设100个位置,这里有9个字符
	printf("%u\n", sizeof(str1));//打印出来
	printf("%d", sizeof(str1));//个人暴力理解,其实d和u也差不多
	//但是u就是一定是正数才可以,如果一个负数用u,就凉了
}

结果:
在这里插入图片描述


strcpy 与strncpy–拷贝


strcpy

用法:strcpy(目标数组, 待拷贝的字符串)
解释:函数将待拷贝字符串拷贝到目标数组中。
如果待拷贝字符串的长度小于目标数组,有‘\0’来作为结束符号,但是如果待拷贝字符串长度大于目标数组,就会有溢出,意思就是会遗漏出来,但是vs2017就直接报错了
栗子1:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = "123456789";//
	char str2[11];
	char str3[4];
	strcpy(str2, str1);//可以容纳
	//strcpy(str3, str1);//会有漏掉的部分
	printf("%s\n", str2);//打印出来
	//printf("%s",str3);
}

结果:
在这里插入图片描述
栗子2:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = "123456789";//
	char str2[11];
	char str3[4];
	//strcpy(str2, str1);//可以容纳
	strcpy(str3, str1);//会有漏掉的部分
	//printf("%s\n", str2);//打印出来
	printf("%s",str3);
}

结果:
在这里插入图片描述

strncpy

用法:strncpy(目标数组, 待拷贝的字符串,指定长度n)
解释:函数将待拷贝字符串的 n 个字符拷贝到目标数组中。
如果待拷贝字符串的长度小于 n,那么就用 ‘\0’ 填充额外的空间。
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "123456789";//这里有9个字符
	char str2[100] = "";//预设100个位置
	strncpy(str2, str1,8);
	printf("%s", str2);//打印出来
}

结果
在这里插入图片描述

如果待拷贝字符串的长度大于或等于 n,那么只有 n 个字符被拷贝到目标数组中
(注意:这样的话将不会以结束符 ‘\0’ 结尾)。会有缺少部分。
提示:为了使该函数更“安全”,建议使用 数组名[sizeof(数组名) - 1] = ‘\0’; 语句确保目标字符串是以 ‘\0’ 结尾。
源字符串和目标数组的位置不应该重叠。虽然不报错,但是主要是这样没有什么变化,没有啥意义。
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "123456789";
	strncpy(str1, str1,5);//你不会天真的认为结果是12345吧,哈哈,那就错了
	printf("%s",str1);
}

结果:
在这里插入图片描述


strcat与strncat–连接


strcat

用法:strcat(数组1,数组2)
解释:strcat 函数用于连接两个字符串。
将源字符串拷贝并连接到目标数组存放的字符串后边,此过程将覆盖第一个参数的结束符 ‘\0’。两个参数的位置不应该重叠。
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";//注意这里要有大于两个字符串长度之和的数组大小
	//要不然又开始报错了
	char str2[] = "how are you?";
	strcat(str1, str2);
	printf("%s\n",str1);
}

结果;
在这里插入图片描述
返回值:返回值是指向目标字符串的指针。
如果觉得丑,可以用这个

栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";
	char str2[] = "how are you?";
	strcat(str1, "!");
	strcat(str1,str2);
	printf("%s\n",str1);
}

结果:
在这里插入图片描述

strncat

用法:
strncat(数组1,数组2,字符串长度n)
解释:
注意,对于数组1,应该包含一个字符串,并且有足够容纳连接后的总字符串长度的空间。
strncat 函数用于拷贝数组2中的 n 个字符到目标数组的字符串后边,并在末尾添加结束符 ‘\0’。
如果数组2的长度小于 n,那么不会像 strncpy 函数那样使用 ‘\0’ 进行填充(但结束符 ‘\0’ 还是有的)。
另外,目标数组中的原有的字符串并不算在 n 中
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";//这里的100,为后面新字符串的加入留有足够空间
	char str2[] = "how are you?";
	strncat(str1, "!",1);
	strncat(str1,str2,1);
	printf("%s\n",str1);
}

结果:
在这里插入图片描述


strcmp与strncmp–比较ASCII码


strcmp

用法:
strcmp(数组1,数组2)
解释:
strcmp 函数用于比较两个字符串。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,直到发现两个字符不相等或抵达结束符(’\0’)为止。
如果相等返回0;数组1某个ASCII码大于第二个,按顺序的,就返回大于0的数;如果小于,就返回小于0的数,判断到有不一样的地方就直接终止。
同时strcmp经常会和!一起使用,比如说!strcmp(数组1,数组2)
就是strcmp==0的意思。会用于判断

栗子:

//字符串处理函数
#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abc";
	char str2[] = "bbc";
	(!strcmp(str1, str2)) ? printf("same") : printf("different");//这个是一个判断的骚操作
	//喜欢的可以百度一下,但是如果懒也没关系,我下次会详细解释的,会有各种各样的骚操作哟!
	//嘻嘻
}

结果:
在这里插入图片描述

strncmp

用法:
strcmp(数组1,数组2,长度n)
解释:
strncmp 函数用于比较两个字符串的前 n 个字符。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,发现两个字符不相等或抵达结束符(’\0’)为止,或者前 n 个字符完全一样,也会停止比较。
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abc";
	char str2[] = "abcdefg";
	(!strncmp(str1, str2,3)) ? printf("same") : printf("different");
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sscanf函数是C语言中一个非常常用的函数,它可以将一个字符串按照指定的格式转换成相应的数据类型。在嵌入式开发中,sscanf函数也是非常常见的,因为很多时候需要从串口或者其他外部设备中读取数据,并将其转换成相应的数据类型进行处理。下面是一些sscanf函数的使用技巧: 1. 使用sscanf函数时一定要注意格式字符串的正确性。格式字符串中的占位符必须与待转换的数据类型相对应,否则会发生未知错误。 2. 如果待转换的字符串中包含多个数据,可以使用多个占位符进行转换。例如,如果待转换的字符串为"1,2,3",可以使用" %d,%d,%d"的格式字符串进行转换。 3. 可以使用sscanf函数的返回值来判断转换是否成功。如果返回值等于待转换字符串的长度,则说明转换成功,否则转换失败。 4. 如果待转换的字符串中包含浮点数,可以使用"%f"或者"%lf"的格式字符串进行转换。 5. 如果待转换的字符串中包含十六进制数,可以使用"%x"的格式字符串进行转换。 6. 如果待转换的字符串中包含字符或字符串,可以使用"%c"或者"%s"的格式字符串进行转换。 7. 如果待转换的字符串中包含指针类型的数据,可以使用"%p"的格式字符串进行转换。 总之,在使用sscanf函数时一定要注意格式字符串的正确性,否则很容易出现转换错误的情况。同时,还应该注意sscanf函数返回值的判断,以确保转换的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值