strspn() 和 strcspn() 函数【转】

本文转载自:https://flyer103.wordpress.com/2011/06/03/strspn-%E5%92%8C-strcspn-%E5%87%BD%E6%95%B0/

前几天在看一本关于 Unix 环境编程的书时,在一个程序中有个库函数 strspn(),不知道用法是什么。在 Linux 下通过

$ man 3 strspn

查看它的用法。但其中讲的不明白,举了几个例子都与 man 中的解释相反。Google 了很多次才明白用法,具体为:

     #include <string.h>
     size_t strspn(const char *s, const char *accept);
     size_t strcspn(const char *s, const char *reject);

     注意两个函数的返回值的位置,都是按 s 的首位置为 0 开始计数的。
     第一个函数的作用是,从 s 第一个字符开始,逐个检查字符与 accept 中
     任意字符是否不相同,若不相同,则返回第一次出现不相同的位置且程序
     正常退出,否则返回的是 s 的长度.
     第二个函数作用是,从 s 第一个字符开始,逐个检查字符与 reject 中任
     意字符是否相同,若相同,则返回第一次出现相同的位置且程序正常退出,
     否则返回的是 s 的长度.

示例:
/*
 * To understand the useage of strspn()
 */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char *str1 = "1234567890";
        char *str2 = "1234567890";
        char *str3 = "gdfa1234af5";
        char *str4 = "ha";

        printf("%s in %s is %d
", str2, str1, strspn(str1, str2));
        printf("%s in %s is %d
", str4, str3, strcspn(str3, str4));

        return 0;
}

结果分别是 10 和 3.

此次经历,让我对 man page 的正确性有了些怀疑。虽然大部分都是对的,但对于可能影响到以后程序的稳定性和安全性的用法,必须要多举不同的例子来验证。写程序要严谨,要对自己写的每行代码都能预测到该出现的结果。

原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/6402910.html