常用函数
clock()
头文件 #include <ctime>
获取当前时钟计数,一般都是ms为单位,也可以通过CLOCKS_PER_SEC宏计算当前second时间,比如:
printf("%d",clock()/CLOCKS_PER_SEC);
sin()
函数sin的参数是使用弧度制的,需要将角度转换成弧度
比如使用简单的带参宏:
#define j2h(x) (3.1415926*(x)/180.0) sin(j2h(90))
sprintf
sscanf返回值为1表示读到了一个有效数据,如果读取到2个有效数据,则返回2
将数据输出到字符串,例如:
sprintf(s, "%d", 123); //产生"123"
sscanf
从字符串获取数据,例如:
sscanf("12345","%d",&data);
(浮点数的话只支持float型)
strstr
从字符串查找子串是否存在,若存在则返回所在位置的char *指针,不存在返回NULL,例如:
char str[]="ABCDEFG"; char *presult; presult= strstr(str,"BCD"); //查找到有BCD子串,所以*presult="BCDEFG";
strchr
和strstr函数性质一样,不过该函数是查找字符是否存在
char *strchrnul(const char *s, int c);
perror
打印错误信息,例如在arm机上运行:
iconv_t cd = iconv_open ("GBK", "UTF-8"); if (cd == (iconv_t)-1) { perror ("iconv_open"); }
打印:
iconv_open: Invalid argument
参考:http://blog.csdn.net/xp5xp6/article/details/52513122
iconv
参考https://www.cnblogs.com/etangyushan/p/3753847.html
#include <iconv.h>
有3个常用函数
1
iconv_t iconv_open (const char* tocode, const char* fromcode);
打开转换编码的句柄,也就是类似文件描述符.
返回值: 返回一个句柄iconv_t 格式,若返回-1表示打开失败
例如:
iconv_t cd = iconv_open ("GBK//IGNORE", "UTF-8"); //utf-8转GBK, //IGNORE :遇到无法转换字符跳过
2
size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
根据第一个参数iconv_t cd句柄来转换格式.(需要调用调用iconv_open 成功后,才能调用iconv )
- inbuf :需要转换的字符串
- inbytesleft :存放还有多少字符没有转换
- outbuf:存放转换后的字符串
- outbytesleft :存放转换后,tempoutbuf剩余的空间
3
iconv_close (iconv_t cd);
转换成功后,关闭iconv_t cd句柄
strtoul (string to unsigned long)
头文件:#include <stdlib.h>
作用: 将参数nptr字符串根据参数base来转换成无符号的长整型数。
函数原型:
unsigned long strtoul(const char *nptr,char **endptr,int base ); //*nptr:字符串 //endptr:存放遇到什么条件终止的,填入0也行 //base:要转换的数据二进制类型, 从2至36,或0.当base==0,表示自动识别
返回值
返回转换后的长整型数
实例:
#include "stdio.h" #include <stdlib.h> int main() { int x; char str[10]; char *s1; while(1) { scanf("%s",&str); x=strtoul(str,&s1,0); printf("strtoul: %d\r\n",x); printf("endptr:%s\r\n",s1); } }
输入1234ABCD
打印:
strtoul: 1234 endptr: ABCD
getopt (Parse command-line options分析命令行参数)
#include <unistd.h> int getopt(int argc, char * const argv[],const char *optstring); //c: counter v:vector extern char *optarg; //指向当前选项参数的指针 extern int optind; //(option index)下一次调用getopt时,从optind存储的位置处重新开始检查选项。
返回值
- 若选项被成功找到,则返回选项字符值,
- 如果所有命令行成功解析完,则返回-1
- 如果解析到不正确的选项或者没有跟选项的参数时,则返回?
*optstring选项在getopt定义里分为三种:
1. 不带参数的选项
比如:
rm work/ -rf //r和f选项后面就没跟参数
对应的getopt函数就是:
ch=getopt(argc, argv,"rf");
2. 必须带参数的选项,在单个字符后加一个冒号,然后跟的参数可以紧跟或者空格隔开
比如:
tar -xjf 1. tar.bz2 -C ./tmp //-C 后面跟着一个参数
对应的getopt函数就是:
ch=getopt(argc, argv,"xjf:C:"); //xj后面没有冒号,所以不跟参数,而f和C后面有冒号,所以必须加参数
3. 可带参数的选项,在单个字符后加两个冒号 ,该选项后面,如果跟上参数,则必须紧跟,不能以空格隔开
参考代码如下:
#include "stdio.h" #include <unistd.h> extern char *optarg; //指向当前选项参数的指针 extern int optind; //(option index)下一次调用getopt时,从optind存储的位置处重新开始检查选项。 int main(int argc,char *argv[]) { char ch; //ab:不带参数的选项,c:必须带参数的选项 d:可带参数的选项 while(( ch=getopt(argc, argv,"abc:d::"))!=-1) { switch(ch) { case 'a': { printf("a:\n"); printf("optarg: %s\n",optarg); printf("optarg: %d\n",optind); break; } case 'b': { printf("b:\n"); printf("optarg: %s\n",optarg); printf("optarg: %d\n",optind); break; } case 'c': { printf("c:\n"); printf("optarg: %s\n",optarg); printf("optarg: %d\n",optind); break; } case 'd': { printf("d:\n"); printf("optarg: %s\n",optarg); printf("optarg: %d\n",optind); break; } default : { printf("%c:\n",ch); printf("optarg: %s\n",optarg); printf("optarg: %d\n",optind); break; } } } return 0; }
打印输出:
从下图可以看到, 由于m没有紧跟着可带参数选项d,所以为null
人间有真情,人间有真爱。