本文转载自: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 的正确性有了些怀疑。虽然大部分都是对的,但对于可能影响到以后程序的稳定性和安全性的用法,必须要多举不同的例子来验证。写程序要严谨,要对自己写的每行代码都能预测到该出现的结果。

最新文章

  1. noConflict
  2. Oracle Dataguard之failover
  3. ubuntu apt-get update 失败解决
  4. Windows 编译器选项 Runtime Library
  5. meta标签的含义
  6. Compiled Language vs Scripting Language
  7. iOS 9界面适配利器:详解Xcode 7的新特性UIStackView
  8. Linux命令速查大全
  9. 合并两个list,不包含重复的对象
  10. SQL Sever2005卸载问题解决措施
  11. 分布式进阶(十六)Zookeeper入门基础
  12. 学习java一个月的进展
  13. 【centos】/usr/bin与/usr/local/bin的区别
  14. HDOJ 5672//模拟
  15. js判断数据类型的四种方法
  16. Windows服务项目打包成安装包(Windows服务)-----------VS2017项目程序打包成.msi或者.exe
  17. jQuery的deferred对象详解 jquery回调函数
  18. Linux里提示cannot find -lsocket解决办法
  19. Android-CallUtil工具类
  20. Day 12 作业.(完成)

热门文章

  1. asp.net中TextBox只能输入数字的最简洁的两种方法
  2. 2213 Problem J
  3. 基于ormlite创建数据库存储数据案例
  4. python学习【第七篇】python文件操作
  5. Codeforces 678E Another Sith Tournament 状压DP
  6. 《从零开始学Swift》学习笔记(Day 46)——下标重写
  7. EasyPlayer.js网页全终端播放器安装使用文档
  8. android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结
  9. Nulls
  10. ehcache缓存框架简介(一)