本文转载自: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\n", str2, str1, strspn(str1, str2));
printf("%s in %s is %d\n", str4, str3, strcspn(str3, str4)); return 0;
} 结果分别是 10 和 3.

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

strspn() 和 strcspn() 函数【转】的更多相关文章

  1. 【 C 】高级字符串查找之 strspn 和 strcspn 的思考

    我的CSDN博客 strspn 这个库函数是真的很难理解,看了很多中文描述,反正都是不知所云,给出一系列的例子,结果也是让我瞠目结舌,荒唐.荒谬.荒诞! 特此记录理解过程,最后竟然是百度百科让我明白了 ...

  2. PHP strcspn() 函数

    实例 输出在字符串 "Hello world!" 中找到字符 "w" 之前查找的字符数: <?php高佣联盟 www.cgewang.comecho st ...

  3. php strcspn()函数 语法

    php strcspn()函数 语法 作用:输出在字符串中找到某字符之前查找的字符数.直线电机参数 语法:strcspn(string,char,start,length) 参数: 参数 描述 str ...

  4. strspn 和strcspn

    1.strcspn头文件:#inclued<string.h>定义函数:size_t strcspn(const char *s, const char * reject);函数说明:st ...

  5. strcspn()函数

    函数描述: 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符. 函数声明: #include<string.h> size_t strcspn(const char ...

  6. strcspn函数的用法

    #include <string.h> main() { char *str = "Linux was first developed for 386/486-based pcs ...

  7. strspn和strcspn妙用

    http://blog.csdn.net/aidenliu/article/details/5460201

  8. PHP字符串——字符串函数

    比较字符串PHP有两个操作符和6个函数用于字符串间相互比较. 精确比较你可以用==和===操作符来比较两个字符串是否相等.这两个操作符的不同在于它们如何处理非字符串数据类型的操作数.==操作符把非字符 ...

  9. C和C指针小记(十四)-字符串、字符和字节

    1.字符串 C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中. 字符串常量和适用于那些程序不会对他们进行修改的字符串. 所有其他字符串都必须存储于字符串数组或动态分配的内存 ...

随机推荐

  1. cocos2dx-3.0(前言)

    说了好久,告诉自己要開始学cocos2dx(在心理里告诉了好久),然后养成良好习惯,记录自己学习cocos2dx的过程.一个是怕自己忘记.还有一个是更加让自己理解透彻(或许哪天我写的好了,组合一下出一 ...

  2. 涉及spring的相关概念

    1.pojo 2.为了降低java开发的复杂性,spring采用了4中策略 (1).基于POJO的轻量级和最小侵入性编程 (2).通过依赖注入和接口编程实现松耦合 (3).基于切面和惯例进行声明式编程 ...

  3. 学习php必须要了解的一些知识

    前言:每个人的成功都是用辛勤的劳动换来的 一.网络的基础知识 IP地址:Internet protocol address 指的是互联网协议地址,由二进制构成,(IPV4是32位的二进制),我们人为的 ...

  4. Android:SlidingMenu+ListView+ViewPager 的滑动冲突

    在项目中遇到了SlidingMenu.ListView.ViewPager 一起使用.而且ViewPager 是放在ListView的header中,这样的情况下会无法滑动ViewPager,通过在网 ...

  5. PHP面向过程和面向对象

    php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...

  6. ZOJ 2059 The Twin Towers(双塔DP)

    The Twin Towers Time Limit: 2 Seconds      Memory Limit: 65536 KB Twin towers we see you standing ta ...

  7. Bridged Adapter(网桥模式)

    http://www.jianshu.com/p/f59a0695b164 https://technology.amis.nl/2014/01/27/a-short-guide-to-network ...

  8. 如何查看l操作系统是否开启rpc服务

    linux操作系统 在linux 5.X以及下的版本你可以通过service portmap status命令查看rpc是否启动.如果提示running,表示正在运行:如果提示stop就是关闭了.如果 ...

  9. SQL 排序的N种方法

    一.手工查询得出名次 select * ,select count(*)+1 from T2 where T2.[成绩] > T1.[成绩] as 名次 from T1 结果:  1 2 3 3 ...

  10. 一、Nuxt简介

    1.Nuxt是什么    Nuxt.js是基于vue的服务器端渲染框架,常用来做SSR(服务器端渲染)   2.为什么用Nuxt    Vue开发的SPA(单页应用)不利于搜索引擎的SEO优化   3 ...