C语言一些函数平时很少见,但是有时候却非常有用.也别是字符串处理函数和主函数处理函数.
strchr和strrchr
首先出场的是strchr和strrchr函数,原型如下:
strchr函数主要功能就是查找ch在字符串str中首次出现的位置,然后函数返回指向这个位置的指针.strrchr函数功能和strchr函数基本一致,只是它查找的是ch在字符串str最后出现的位置,并返回指向这个位置的指针.
有以下例子:
输出为:
strspn和strcspn
函数原型如下:
strspn函数功能是返回str起始部分开始,与group中任意字符不匹配的第一个的位置.strcspn函数功能与strspn相反,它返回的是str起始部分开始,与group中任意字符匹配的第一个位置.
举个例子:
输出为:
strtok
函数原型为:
sep是字符串,定义了用作分隔符的字符集合.函数找到str的下一个标记,并将其用NULL结尾,然后返回一个指向这个标记的指针.一般的用法是第一次调用第一个参数为指向字符串的指针,之后都用NULL作为第一个参数,这样可以输出分割出的所有子字符串.
举个例子:
输出为:
参数处理函数getopt
在看UNIX进程间通信机制时,经常看到的函数就是getopt,然后平时我们又很少接触到.
函数原型为:
这个函数设置了几个全局变量,optarg——指向当前选项参数(如果有)的指针.optind——再次调用 getopt() 时的下一个 argv 指针的索引.optopt——最后一个未知选项
optstring的指定的内容的意义(例如getopt(argc,argv,"ab:c:de::");
- 单个字符,表示选项,例如上述函数参数,可以在运行程序时,添加选项-a
- 单个字符后街一个冒号:表示该选项后必须跟一个参数,参数紧跟在选项后或者空格隔开.该参数的指针赋给optarg,例如可以添加-b 123
- 单个字符后跟两个冒号::,表示后面可以跟一个参数或者不跟.
举个例子:
我们可以这样来调用上述程序:
输出为:
要理解上述输出,先分析参数
- argc=5;
- argv[0]=a.out
- argv[1]=-a1234
- argv[2]=-b432
- argv[3]=-c
- argv[4]=-d
getopt函数中的argc和argv即为main函数参数argc和argv.全局变量optind默认值为1,所以getopt第一次读取的参数为argv[1],然后optind+1.所以第一次输出optind=2,argv[1]的选项为a,参数字符串为1234.
如果getopt找不到符合的参数则会印出错误的信息,并将全局变量optopt设为"?"字符. 上述输出均为字符"+",则说明找到了符合的参数,没有出错.后面的分析和上面一样.
如果不希望getopt打印出错误信息,只有将全局变量opterr设为即可.
参考
C与指针
雪精灵的专栏博客 http://blog.csdn.net/baixue6269/article/details/7550184