C字符串操作函数

   写了分词之后发觉有个好处,那就是字符串操作函数熟悉了不少.这里做做总结吧:
   1.常用的函数
引用

      #include < string.h >
      size_t strlen(const char *s);
      int strcmp(const char *s1, const char *s2);
      char *strcpy(char *dest, const char *src);
      char *strcat(char *dest, const char *src);
      char *strchr(const char *s, int c);
      char *strrchr(const char *s, int c);
      char *strstr(const char *haystack, const char *needle);

   2.限定长度的比较,拷贝和追加函数
引用

      int strncmp(const char *s1, const char *s2, size_t n);
      char *strncpy(char *dest, const char *src, size_t n);
      char *strncat(char *dest, const char *src, size_t n);

   3.很有用, 但很多人没有用过的函数
引用

      size_t strcspn(const char *s, const char *reject);
      size_t strspn(const char *s, const char *accept);
      char *strpbrk(const char *s, const char *accept);
      /* 非线程安全,若要求线程安全,则使用 strtok_r() */
      char *strtok(char *s, const char *delim);

   4.下面的一些函数不在C语言的标准里面, 但是在UNIX环境下相当普遍
引用

      /* 和 strtok() 的功能相关,但又有所不同. */
      char *strsep(char **stringp, const char *delim);
      /* 复制一个字符串,用完之后需要free(). */
      char *strdup(const char *s);
      int strcasecmp(const char *s1, const char *s2);
      int strncasecmp(const char *s1, const char *s2, size_t n);
      char *index(const char *s, int c);   /* 功能同 strchr(), 建议使用 strchr() */
      char *rindex(const char *s, int c);   /* 功能同 strrchr(), 建议使用 strrchr() */

    5.GNU 提供的一些字符串函数, 在Linux(也许FreeBSD也行)下可用, 直接使用下列函数,而不是自己编写功能雷同或类似的函数
引用

      char *stpcpy(char *dest, const char *src);
      char *stpncpy(char *dest, const char *src, size_t n);
      size_t strnlen(const char *s, size_t maxlen);
      char *strdupa(const char *s);
      char *strndup(const char *s, size_t n);
      char *strndupa(const char *s, size_t n);

   常见不良习惯
  1.对同一字符串,多次调用strlen().
     strlen()是一个很昂贵的操作,字符串越长越昂贵,所以应该只调用一次,如果下次要使用该值,则将其存到一个变量中.
  2.大量使用 strcat()
     每调用一次strcat(), 其内部调用strlen()一次,代价很高昂.
  3.使用strncpy()拷贝字符串,并且n很大,实际的字符串经常很短
     如果源字符串长度(设为m)短于n, 则拷贝之后的目标字符串后面的(n-m)字节内存会被memset()为0,很多时候我们的程序是不需要这种功能的.但如果这确实是你需要的,那没有问题.另外,注意,如果m大于等于n, 则目标字符串末尾不会添加'/0'.
  4.自己编写与上节所列函数功能雷同或类似的函数
     很多人不知道上述一些函数,当需要类似功能的时候,则自己编写. 99%的情况是,自己编写的函数比上述函数慢,容易产生bug, 别人不易理解.
  5.自己编写的字符串操作函数,参数应该加const的没有加
     很多时候我们需要自己编写函数操作字符串,该函数并不会修改传入的字符串参数,就应该在参数前加const限定符.
 
-------------------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值