常用函数

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

 

 

 

posted @ 2018-03-10 16:45  诺谦  阅读(898)  评论(0编辑  收藏  举报