• 【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 compare(字符串比较的缩写)用于比较两个字符串并根据比较结果返回整数;

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

    1.2 简单举例:

    1. 比如:char a[]="abcd";
    2. char *b="abcd";
    3. char *d="abcde";
    4. int d=strcmp(a,b); //那么d的值是0
    5. d=strcmp(b,d); //d的值是-1 因为 '\0' 比'e' 小
    6. d=strcmp(d,b); //d的值是1,因为 'e' 比'\0'大

    1.3 工程举例:

    1. memcpy(buffer,UART7_RX_BUF,len);
    2. if(strcmp(buffer,"APC")==0)
    3. {
    4. if(ucEdfaPumpSetMode==0)return 0; //正确返回
    5. }
    6. else if(strcmp(buffer,"ACC")==0)
    7. {
    8. if(ucEdfaPumpSetMode==1)return 0; //正确返回
    9. }
    10. return 2;//返回错误

    2. memcpy

    2.1 释意

    C语言:#include

    C++:#include

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

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

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

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

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

    3. strcpy

    3.1 释意

    头文件:#include 和 #include

    C++:#include

    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 工程举例:

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

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

    5. atof

    C语言:

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

    举例说明:

    1. int main()
    2. {
    3. double d;
    4. char str[] = "123.456";
    5. d=atof(str);
    6. printf("string=%sdouble=%lf\n",str,d);
    7. return 0;
    8. }

    6. strlen

    C语言:#include

    C++:#include

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

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

    举例:

    1. #include
    2. #include
    3. using namespace std;
    4. int main(void)
    5. {
    6. char aa[200]="Hello, World!";
    7. cout<<strlen(aa)<
    8. return 0;
    9. }
    10. /*这个样例的结果为13*/

    strlen和sizeof的区别: 

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

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

    7 . rint

    四舍五入至整数值

    1. #include /* printf */
    2. #include /* rint */

    函数原型:

    double rint (double x);

    float rintf (float x);

    举例说明: 

     return (int16_t)rint(power*10);
    1. printf ( "rint (2.3) = %.1f\n", rint(2.3) );
    2. printf ( "rint (3.8) = %.1f\n", rint(3.8) );
    3. printf ( "rint (-2.3) = %.1f\n", rint(-2.3) );
    4. printf ( "rint (-3.8) = %.1f\n", rint(-3.8) );
    5. rint (2.3) = 2.0
    6. rint (3.8) = 4.0
    7. rint (-2.3) = -2.0
    8. rint (-3.8) = -4.0

  • 相关阅读:
    Mentor Xpedition VX2.11入门遇到的问题和解决方案 (1)
    SpringBoot 配置 Redis 连接池
    JS中数值类型的本质
    EXCEL 数据透视表的制作
    2023.9.11 关于传输层协议 UDP和TCP 详解
    微信小程序
    STM32 CAN过滤器标识符学习笔记
    HP魔法觉醒自动抢协作和自动社团答题的半成品
    Django【执行查询】(二)
    CRM客户关系管理系统源码跟单销售公司订单跟进客户公海合同管理办公erp客户管理(小程序+APP+H5)
  • 原文地址:https://blog.csdn.net/Roger_717/article/details/126280210