• C语言09、字符串函数和内存函数


    字符函数和字符串函数

    求字符串长度(strlen)

    size_t strlen(const char* str);

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

    2.参数指向的字符串必须要以'\0'结束

    3.注意函数的返回值是size_t,是无符号的

    拷贝字符串(strcpy)

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

    1.将源字符串复制到目标中,包括终止的空字符(并在该处停止)。

    2.源字符串必须以'\0'结束

    3.会将源字符串中的'\0'拷贝到目标空间

    4.目标空间必须足够大,以确保能存放源字符串

    5.目标空间必须可变

    strncpy

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

    1.将源字符串的前num个字符复制到目标,如果赋值前num个字符时源字符串已经结束,则在目标处用'\0'填充,知道共计num个为止(拷贝num个字符从源字符串到目标空间

    如果源字符串的长度小于num,则拷贝完源字符串之后,在后面追加0,直到num个)

    连接字符串(strcat)

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

    1.将源字符串的副本追加到目标字符串。 目标中的终止空字符将被源的第一个字符覆盖,并在目标中的这两个字符串联形成的新字符串的末尾包含一个空字符。

    2.源字符串必须以'\0'结束

    3.目标空间必须足够大,能容纳下源字符串的内容

    4.目标空间必须可修改

    5.字符串不能自己给自己追加

    strncat

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

    1.将源字符串的前num个字符附加到目标,再加上一个终止的空字符

    2.如果源字符串的长度小于num,则只复制到'\0'之前就停止

    字符串比较(strcmp)

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

    1.这个函数比较每个字符串的第一个字符。 如果它们相等,则继续处理各自往后的一对字符,直到字符不同或达到终止的空字符。

    2. 第一个字符串大于第二个字符串,则返回大于0的数字

    3.第一个字符串等于第二个字符串,则返回0

    4.第一个字符串小于第二个字符串,则返回小于0的数字

    strncmp

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

    比较前num个字符

    在字符串中查找字符串(strstr)

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

    返回str1中第一个出现str2的指针,如果str2不是str1的一部分,则返回空指针

    可以做分隔符的(strtok)

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

    1.sep参数是个字符串,定义了用作分隔符的字符集合

    2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分割符分割的标记

    3.strtok函数找到str中的下一个标记,并将其用'\0'结尾,返回一个指向这个标记的指针。(注意:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)

    4.strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置

    5.strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记

    6.如果字符串中不存在更多的标记,返回NULL指针

    用来对库函数报错的strerror

    char* strerror(int errnum)

    返回错误码、所对应的错误信息

    1. #include
    2. #include
    3. #include //必须包含的头文件
    4. int main ()
    5. {
    6.   FILE * pFile;
    7.   pFile = fopen ("unexist.ent","r");
    8.   if (pFile == NULL)
    9.    printf ("Error opening file unexist.ent: %s\n",strerror(errno));
    10.    //errno: Last error number
    11. return 0;
    12. }

    内存操作函数

    memcpy

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

    1.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置

    2.这个函数在遇到'\0'的时候并不会停下来

    3.如果source和destination有任何的重叠,复制的结果都是未定义的

    memmove

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

    1.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的

    2.如果源空间和目标空间出现重叠,接得使用memmove函数处理

    memcmp

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

    1.比较从ptr1和ptr2指针开始的num个字节

    2.一次比较第x个字节的大小,若ptr1>ptr2,则返回大于0的值,若等于,则返回0,若小于,则返回小于0的值

  • 相关阅读:
    机房工程实习报告怎么写2500字
    Python语法--元组、字典、Set
    C语言学习:5、C语言程序的选择结构
    10.1- 10.3读书笔记
    Go常用命令
    水利设计公司资质怎么办理,办理水利设计有限公司及水利丙级资质申请程序
    深入了解软件测试:从入门到奥秘,揭开测试的精髓
    【云原生之Docker实战】使用Docker部署jenkins持续集成工具
    STM32 | USART实战案例
    MoSE论文中Sequential Synthetic Dataset生成代码(时间序列多任务学习数据集)
  • 原文地址:https://blog.csdn.net/weixin_60320290/article/details/126155718