• 字符函数和字符串函数(详解大全)


    重点

    C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在
    常量字符串 中或者 字符数组 中。
    字符串常量 适用于那些对它不做修改的字符串函数.

    1.函数介绍

    1.1strlen

    size_t strlen ( const char * str );

    ⭐字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
    含 '\0' )。

    ⭐参数指向的字符串必须要以 '\0' 结束。
    ⭐注意函数的返回值为size_t,是无符号的( 易错 )
    ⭐学会strlen函数的模拟实现

    1.2strcpy

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

    ⭐源字符串必须以 '\0' 结束。
    ⭐会将源字符串中的 '\0' 拷贝到目标空间。
    ⭐目标空间必须足够大,以确保能存放源字符串。
    ⭐目标空间必须可变。
    ⭐学会模拟实现。

    1.3strcat

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

    ⭐源字符串必须以 '\0' 结束。
    ⭐目标空间必须有足够的大,能容纳下源字符串的内容。
    ⭐目标空间必须可修改。
    ⭐字符串自己给自己追加,如何?

    追加到前一个字符串(也得有\0)的末尾\0处!包含\0;

    1.4strcmp

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

    ⭐第一个字符串大于第二个字符串,则返回大于0的数字
    ⭐第一个字符串等于第二个字符串,则返回0
    ⭐第一个字符串小于第二个字符串,则返回小于0的数字

    1.5strncpy

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

    ⭐拷贝num个字符从源字符串到目标空间。
    ⭐如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

    1.6strncat

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

    讲source字符串的前num个字符加到destination的\0处;  

    1.7strncmp

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

    对前num个字符进行比较大小!!!!!

    1.8strstr

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

    从str1中找到第一次出现str2字符串的位置,然后返回,如果找不到则返回空指针。

    1.9strtok

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

    ⭐sep参数是个字符串,定义了用作分隔符的字符集合
    第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
    记。

    ⭐strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
    ⭐strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
    并且可修改。)
    ⭐strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
    中的位置。
    ⭐strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
    记。
    ⭐如果字符串中不存在更多的标记,则返回 NULL 指针。

    写个代码举个栗子

    1. #include<stdio.h>
    2. #include<string.h>
    3. int main()
    4. {
    5. int str[]={1015332189@qq.com}
    6. int buf[100];
    7. strcpy(buf,str);//因为strtok会更改原来数组,所以为了不破坏原来的数据,就拷贝进一个新的数组中
    8. char *p="@.";//这个就是要从str找的标记集。
    9. char *s=NULL; //这个字符是用来接受strtok返回的地址的
    10. for(s=strtok(buf,p);s!=NULL;s=strtok(NULL,p))
    11. {
    12. printf("%s\n",s);
    13. }
    14. //这个函数虽然可以多次用,但是只需要第一次传数组,后面调用传空指针就可以了。
    15. return 0;
    16. }

    2.0 strerroe

    char * strerror ( int errnum );

    2.1memcpy

    void * memcpy ( void * destination, const void * source, size_t num );

    ⭐函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
    ⭐这个函数在遇到 '\0' 的时候并不会停下来。
    ⭐如果source和destination有任何的重叠,复制的结果都是未定义的。

    2.2memmove

    void * memmove ( void * destination, const void * source, size_t num );

    ⭐和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
    ⭐如果源空间和目标空间出现重叠,就得使用memmove函数处理。

    2.2memset

    2.3memcmp

    int memcmp ( const void * ptr1,
    const void * ptr2,
    size_t num );

    这个是用来比较两个数组指定长度内存块的大小

  • 相关阅读:
    用原生JavaScript实现jQuery的$.getJSON
    ISO20000认证一般要多少钱
    React入门学习(一)
    【js】-【贪心算法】-笔记
    【技能树笔记】网络篇——练习题解析(九)
    Unity与IOS⭐一、百度语音IOS版Demo调试方法
    电影《二手杰作》观后感
    SpringBoot集成百度AI实现人脸识别
    【前端】不同类型数据组装拼接
    临近过年无情被裁,我面试大厂的这几个月…
  • 原文地址:https://blog.csdn.net/sl520321/article/details/133942466