【C语言】常用的字符串处理函数

目录

1. strcmp        比较两个字符串并根据比较结果返回整数

2. memcpy        拷贝内存块到目标空间

3. strcpy        把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间

4. strcat        实现字符串的拼接

5. atof        把字符串转换成浮点数

6. strlen         它从内存的某个位置开始扫描,直到碰到第一个字符串它从内存的某个位置开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

7 . rint        四舍五入至整数值


1. strcmp

1.1 释意

<string.h>

string compare(字符串比较的缩写)用于比较两个字符串并根据比较结果返回整数;

语法结构为【int strcmp(char *str1, char *str2)】比较字符串str1和str2是否相同,如果相同则返回0,如果不同,在不同的字符处如果str1的字符大于str2字符,则返回负1。

1.2 简单举例:

比如:char a[]="abcd";

char *b="abcd";

char *d="abcde";

int d=strcmp(a,b); //那么d的值是0

d=strcmp(b,d); //d的值是-1 因为 '\0' 比'e' 小

d=strcmp(d,b); //d的值是1,因为 'e' 比'\0'大

1.3 工程举例:

memcpy(buffer,UART7_RX_BUF,len); 
    if(strcmp(buffer,"APC")==0)
    {
	    if(ucEdfaPumpSetMode==0)return 0; //正确返回						
    }
	else  if(strcmp(buffer,"ACC")==0)
    {
	    if(ucEdfaPumpSetMode==1)return 0; //正确返回	
    } 
return 2;//返回错误 

2. memcpy

2.1 释意

C语言:#include<string.h>

C++:#include<cstring>

memory copy(拷贝内存块到目标空间)

void *memcpy( void *dest, const void *src, size_t count ); 

参数destsrccount
解析目标空间地址要拷贝内容空间源地址拷贝内容字节数

   memcpy函数不像strncpy函数一样只能拷贝字符,memcpy函数可以拷贝任意类型的内容。

如果拷贝在内容超过目的空间大小,那么就会溢出 编译器会报出警告;在使用memcpy时避免内存重叠的情况

3. strcpy

3.1 释意

头文件:#include <string.h> 和 #include <stdio.h>

C++:#include<cstring>

strcpy,即string copy(字符串复制)的缩写。

原型声明:char *strcpy(char* dest, const char *src);

strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

3.2 工程举例:

if(ucEdfaPumpSetMode==0)strcpy(strSet,"APC");//strcpy(a,b),是把字符串b复制到a

3.2. strcpy和memcpy的区别

strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

4. strcat

C库函数strcat()函数的功能是实现字符串的拼接。其函数原型如下所示:

char *strcat(char *dest, const char *src)
  •   dest:指向目标数组,该目标包含看一个C字符串,且足够容纳追加之后的字符串。
  •        src: 指向要追加的字符串。

4.1 工程举例:

void sendEdfaCmd(char* cmd)
{ 
	u8 len=0;  
	strcpy((char*)strCmd,cmd); //将CMD复制到数组中
	//设置
	if(strcmp(cmd,CMD_SET_PUMP_MODE)==0)//strcmp是个比较函数,用法就是a>b返回1,a<b返回-1,a==b返回0.CMD_SET_PUMP_MODE=01
	{	
		if(ucEdfaPumpSetMode==0)strcpy(strSet,"APC");//strcpy(a,b),是把字符串b复制到a
		else if(ucEdfaPumpSetMode==1)strcpy(strSet,"ACC");
		else strcpy(strSet,"");	 
		strcat((char*)strCmd,strSet);//值strcat在C语言中代表的是追加字符串的函数,作用是将A字符串追加到B字符串末尾,A字符串值保持不变,B字符串变长,追加时需要保证B字符串在加上A之后依旧不能溢出。
		strcat((char*)strCmd,"\r\n");	//\r\n结束符
		SendCmdType = CMD_SET_PUMP_MODE_TYPE;
	}
}

可以用strcat来对当前字符的末尾进行添加字符串。

5. atof

C语言:<stdlib.h>

atof()是C 语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数。该函数名是 “ascii to floating point numbers” 的缩写。语法格式为:double atof(const char *nptr)。

举例说明:

int main()
{
double d;
char str[] = "123.456";
d=atof(str);
printf("string=%sdouble=%lf\n",str,d);
return 0;
}

6. strlen

C语言:#include<string.h>

C++:#include<cstring>

strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义了一个字符型数组但没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

举例:

#include<iostream>
#include<cstring>
using namespace std;
int main(void)
{
    char aa[200]="Hello, World!"; 
    cout<<strlen(aa)<<endl; 
    return 0;
}
/*这个样例的结果为13*/

strlen和sizeof的区别: 

我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度

char str[20000]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=20000; >>>> sizeof 计算的则是分配的数组 str[20000] 所占的内存空间的大小,不受里面存储的内容改变。

7 . rint

四舍五入至整数值

#include <stdio.h>      /* printf */
#include <math.h>       /* rint */

函数原型:

double rint (double x);

float rintf (float x);

举例说明: 

 return (int16_t)rint(power*10);
printf ( "rint (2.3) = %.1f\n", rint(2.3) );
printf ( "rint (3.8) = %.1f\n", rint(3.8) );
printf ( "rint (-2.3) = %.1f\n", rint(-2.3) );
printf ( "rint (-3.8) = %.1f\n", rint(-3.8) );
rint (2.3) = 2.0
rint (3.8) = 4.0
rint (-2.3) = -2.0
rint (-3.8) = -4.0

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值