一些开发中用到的接口整理
int ret=strspn(str1, str2)
表示str1中有几个是被str2中有的
比如str1=255,str2=123456
那ret=3,一般这个用法主用用于检测str1中全是数字,组合用法就是
strspn(str1, “0123456789”) == strlen(str1),表示所有str1全是数字
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
auto 存储类是所有局部变量默认的存储类。
auto 只能用在函数内,即 auto 只能修饰局部变量
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中
C 语言不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。
int * getRandom( ) { static int r[10]; int i; /* 设置种子 */ srand( (unsigned)time( NULL ) ); for ( i = 0; i < 10; ++i) { r[i] = rand(); printf("%d\n", r[i] ); } return r; }
这个返回值r要带static 否则会出错
strcmp(s1, s2);//用来判断字符串是否相等
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
strstr(s1, s2);//通过返回值判断,s2是s1的子串,返回值>0
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
strchr(s1, ch);//主要用于切割字符串的使用,通过返回s1中第一次出现ch的位置来实现
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
fopen和open的区别
C 实现可变参数
#include <stdio.h>
#include <stdarg.h>
double average(int num,…)
{
va_list valist;
double sum = 0.0;
int i;
/* 为 num 个参数初始化 valist */
va_start(valist, num);//初始化valist
/* 访问所有赋给 valist 的参数 */
for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);//获取int类型的值并指向下一个变量的位置
}
/* 清理为 valist 保留的内存 */
va_end(valist);
return sum/num;
}
int main()
{
printf(“Average of 2, 3, 4, 5 = %f\n”, average(4, 2,3,4,5));
printf(“Average of 5, 10, 15 = %f\n”, average(3, 5,10,15));
}
fprintf
函数根据指定的格式(format),向输出流(stream)写入数据
sprintf
函数根据指定的格式(format),向字符串中写入数据
int isalnum(int c);
检查所传的字符是否是字母和数字
如果 c 是一个数字或一个字母,则该函数返回非零值,否则返回 0。
svn上传默认忽略动态库的问题
打开
Vi ~/.subversion/config
将这条语句
#global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .a .pyc .pyo # .rej ~ ## .#* .*.swp .DS_Store
改成 global-ignores =
C 库函数 char *ctime(const time_t *timer) 返回一个表示当地时间的字符串,当地时间是基于参数 timer。
C 库函数 struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。
C 库函数 char *asctime(const struct tm *timeptr) 返回一个指向字符串的指针,它代表了结构 struct timeptr 的日期和时间
ctime和locatime都是把时间戳返回当地的时间,ctime返回的是char *,locatime返回的是struct tm 结构体,asctime可以把struct tm 结构体转化成字符串,列如:Sat Mar 25 06:10:10 1989
C 库函数 struct tm *gmtime(const time_t *timer) 使用 timer 的值来填充 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
gmtime和localtime用法一样,功能也一样
C 库函数 time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。//常用来把标准时间转化成时间戳
C 库函数 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) 根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
strftime是把结构体中struct tm中的数据进行按照第三个参数的格式提取到第一个参数的字符串中。
Json.xml
花括号保存对象,也称一个文档对象
• 方括号保存数组,每个数组成员用逗号隔开,并且每个数组成员可以是文档对象或者数组或者键值对。
cJSON_Parse 解析接送数据包
cJSON_GetObjectItem 解析花括号,对应的是对象
cJSON_GetArrayItem 解析中括号,对应的是数组,数组里面可以包含多个对象
所以再解析到 cJSON_GetArrayItem 之前发现有多个对象时,通过cJSON_GetArraySize可以解析出有几个对象
类似于
arrayNum = cJSON_GetArraySize(data);
for(i = 0; i < arrayNum; i++)
{
SubData = cJSON_GetArrayItem(data, i);//解析第一个对象
if (NULL == SubData)
{
printf(“dataList error\n”);
goto error;
}
}
指针变量是存储指针的,一旦重启,内存中地址没变的情况下。里面数值是会发生改变的,所以在存储文件到flash时,存储字符数组能保证数据不出问题。
npos是一个常数,用来表示不存在的位置,string::npos代表字符串到头了结束了。
int idx = str.find(“abc”);
if (idx == string::npos)
str字符串中没有找到abc这个字符串 就会返回string::npos
取固定字节长度的字符串,拼接字符串最后一个字符不是’\0’时,会出现乱码,
可以用memcpy(b,(char *)a,9);//从a中拷贝固定的9字节到b中,不会出现乱码
传递指针可以保证接口调用之后值发生变化,指的是接口的参数是指针就可以了,保证是对指针操作就可以改变值
#ifndef min
#define min(a,b) ((a) < (b) ? (a) : (b))
#endif