嵌⼊式开发中常⽤到的C语⾔库函数
1.sprintf
  函数原型:int sprintf(char *string,char *format,[argument,...]);
  sprintf函数说明:字符串格式化命令,主要功能是将格式化数据写⼊某个字符串中,即发送格式化输出到string所指向的字符串。
  函数返回值:字符串长度
  eg:sprintf(s,"%s%d%c","test",1,'2');  /*即把后⾯的参数按照指定格式输⼊到字符串s中*/
  包含头⽂件:<stdio.h>
  注意:sprintf是⼀个变参函数,使⽤sprintf对于写⼊buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使⽤snpintf函数,该函数对可写⼊的字符数做出了限制。
2.snprintf
  函数原型:int snprintf(char *str,size_t size,const char *format,[])
  snprintf函数说明:将可变参数按照format的格式格式化为字符串,拷贝到str中,⾄多拷贝size - 1个字符到⽬标串中,然后再在后⾯加⼀个0。
  函数返回值:若成功则返回欲写⼊的字符串长度,若出错则返回负值。
  eg:char a='a';
    char str[3];
    snprintf(str,sizeof(str),"%02x",a); 
  包含头⽂件:<stdio.h>
3.fseek
  函数原型:fseek(FILE *stream,long offset,int fromwhere)
  fseek函数说明:设置⽂件指针stream的位置。
  如果执⾏成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。
  如果执⾏失败(⽐如offset取值⼤于2*1024*1024*1024,即long的正数取值范围2G),则不改变stream的指向,函数返回⼀个⾮0值。  函数返回值:0或⾮0
  eg:fseek(fp,50L,0)  或者fseek(fp,50L, SEEK_SET)  /*将位置指针移到离⽂件头50个字节处*/
  包含头⽂件:<stdio.h>
4.fread
  函数原型:fread(void *ptr,size_t size,size_t number,FILE *stream)
  fread函数说明:从给定输⼊流stream读取最多count个对象到数组ptr中(相当于对每个对象调⽤count次fgetc)
         ptr -- 这是指向带有最⼩尺⼨size*number字节的内存块的指针。
         size -- 这是要读取的每个元素的⼤⼩,以字节为单位。
         number -- 这是元素的个数,每个元素的⼤⼩为 size 字节。
         stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了⼀个输⼊流。
  函数返回值:成功读取的元素总数会以 size_t 对象返回,size_t 对象是⼀个整型数据类型。如果总数与 number 参数不同,则可能发⽣了⼀个错误或者到达了⽂件末尾。浏览器json格式化
  包含头⽂件:<stdio.h>
  函数原型:void  *memcpy(void *destin,void *source,unsigned n)
  memcpy函数说明:函数的功能是从源内存地址的起始位置开始拷贝若⼲字节到⽬标内存地址中,即从源source中拷贝n个字节到⽬标destin中。
  函数返回值:函数返回指向dest的指针
  eg:char *s="Hello World";
    char d[20];
    memcpy(d,s,(strlen(s)+1));
  包含头⽂件:<string.h>
  拓展:strcpy和memcpy的区别,主要有以下三个⽅⾯:
     1.复制的内容不同,strcpy只能复制字符串,⽽memcpy可以复制任意内容,例如字符数组,整型,结构体,类等。
     2.复制的⽅法不同,strcpy不需要指定长度,它遇到被复制字符串结束符'\0'才结束,所以容易溢出。memcpy是根据其第三个参数决定复制的长度。
      3.⽤途不同,通常再复制字符串时⽤strcpy,⽽需要复制其他数据时,则⼀般⽤memcpy。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。