• 《c和指针》笔记8


      标准库提供了一些用于处理字符串的函数,它们的原型位于头文件string.h中.

      strlen:用于计算字符串的长度,返回类型是一个无符号的整数,因此将它用于表达式的时候要特别注意,如下:

    if( strlen(x) <= strlen(y) )//可以正常运行
       ...
    
    if( 0 <= strlen(y) - strlen(x) )//该表达式永远为真,因为右边表达式的结果将会是一个无符号整数,而无符号数绝对不会为负
       ...

      所以如果要使用strlen作为表达式,则应该在有符号数的表达式中使用.

      strcpy:把一个字符串从一个位置复制到另外一个位置,要注意2点:

    • 需要复制的字符串和目标字符串内存不能重叠,否则结果会是未定义
    • 将一个较长的字符串复制到一个较短的数组中,将会导致溢出

      因此我们可以使用另外一个版本:strncpy.该函数指定了将多少个字符添加到目标字符数组中.

      但是该函数在如果源字符比指定长度更长时,结果字符串将不会以NUL字节结尾,这会导致在使用strlen时查找边界外的内存而导致程序崩溃.

      因此我们在使用该函数的时候,最好在其后手动添加一个NUL字节作为结尾.

      strcat:把一个字符串拷贝添加(拼接)到另一个字符串后面,如果原字符串与目标字符串内存重叠,结果将会是未定义.

      跟strcpy相似,如果长字符串添加到一个较短的数组中,也会导致溢出.

      另外一个版本是:strncat.该函数同strncpy一样指定了将多少字节添加到目标字符数组中,但是该函数会默认在结尾加上NUL字节.

      strcmp:比较2个字符串,如果前者小于后者则返回负数,前者等于后者返回0,前者大于后者返回大于零的值.要注意:标准并没有规定前者小于后者会返回-1,前者大于后者会返回1.

      在使用过程中也尽量不要将该函数的返回值当作布尔值进行测试,因此也不要将其返回值与1或者-1进行比较.

      对于另一个版本strncmp,则是指定了需要比较多少个字节.

      strchr、strrchr在目标字符串中查找一个特定的字符.前者返回的是该字符第一次出现的位置,而后者则是最后一次出现的位置,返回类型均为指针.

      strpbrk是查找任意几个字符,返回的是任意字符在目标字符数组中第一次出现的位置,返回值为指针.

      strstr是用于查找一个子串的.

      strspn、strcspn用于在字符串的起始位置对字符计数的.

      一个字符串常常包含几个单独部分,他们彼此被分隔开.要处理这些部分,我们可以使用strtok,该函数在执行任务的时候,会修改所处理的字符串.

      如果源字符串不能修改,则会复制一份并将这份复制的传给函数.因此函数连续几次调用,虽然参数是一样的,但是结果可能是不同的.

      以上都是关于字符的相关函数.如果想处理任何类型,也就是类似泛型版本的,我们可以使用:memcpy、memmove、memcmp、memchr、memset.

      前几个我们根据名字可以判断它们的用途.

      memchr函数在一个字节序列中查找一个特定的值.

      memset函数把一个序列字节初始化为一个特定的值.

      

      今天就到这里了,明天继续,加油.

  • 相关阅读:
    微信扫码登陆
    jquery的js代码兼容全部浏览器的解决方法
    如何才能成为一名优秀的架构师
    Bootstrap 完全教程笔记
    vue.js笔记总结
    dot.js模板实现分离式
    python基础知识1
    tensorflow基础知识1
    tensorflow基础知识
    常用python库文件
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2564596.html
Copyright © 2020-2023  润新知