strspn() 和 strcspn() 函数【转】
2024-08-31 06:35:08
本文转载自: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 的正确性有了些怀疑。虽然大部分都是对的,但对于可能影响到以后程序的稳定性和安全性的用法,必须要多举不同的例子来验证。写程序要严谨,要对自己写的每行代码都能预测到该出现的结果。
最新文章
- noConflict
- Oracle Dataguard之failover
- ubuntu apt-get update 失败解决
- Windows 编译器选项 Runtime Library
- meta标签的含义
- Compiled Language vs Scripting Language
- iOS 9界面适配利器:详解Xcode 7的新特性UIStackView
- Linux命令速查大全
- 合并两个list,不包含重复的对象
- SQL Sever2005卸载问题解决措施
- 分布式进阶(十六)Zookeeper入门基础
- 学习java一个月的进展
- 【centos】/usr/bin与/usr/local/bin的区别
- HDOJ 5672//模拟
- js判断数据类型的四种方法
- Windows服务项目打包成安装包(Windows服务)-----------VS2017项目程序打包成.msi或者.exe
- jQuery的deferred对象详解 jquery回调函数
- Linux里提示cannot find -lsocket解决办法
- Android-CallUtil工具类
- Day 12 作业.(完成)