常用到的关于操作空间(数组,堆空间)时的函数
> memset()函数
所在位置:string.h
函数声明:
void *memset(void *str, int c, size_t n)
str – 指向要填充的内存块。 c – 要填进去的值。(该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式) n – 要被设置为该值的字符数(要填入几个空间)。
作用:
对数组或堆空间初始化或者重初始化 eg:
- 在定义了一个数组或堆空间时,要使数组的每个空间或是堆的每个空间都变成你想要的值时
int arry[100];
memset(arry,1,100);
如此即可使数组100个空间的值都变成:1
- 当数组或堆在存放了一组数据时,想要把这个数组重新初始化时
int arry[10] = {1,2,3,4,5,6,7,8,9,0};
memset(arry,0,10);
如此即可使得数组所有空间重新初始化
> memcpy()函数
所在位置:string.h
函数声明:
void *memcpy(void *str1, const void *str2, size_t n)
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。 str2 – 指向要复制的数据源,类型强制转换为 void* 指针。 n – 要被复制的字节数。
作用:
将数据从一个空间拷贝到另一个空间 eg:
- 将数组arry从二之后的所有值复制到堆空间arry1第五个空间之后的地方
int arry[10] = {1,2,3,4,5,6,7,8,9,0};
int *arry1 = (int *)malloc(13*sizeof(int));
memcpy(arry1[5], arry[2], 8);
如此即可使数组数组arry的值复制到arry1中
常用到的关于字符串的函数
> sprintf()函数
所在位置:stdio.h
函数声明:
int sprintf(char *str, const char *format, ...)
str – 字符串所存放的地方。 format–所要字符串 …–所使用的的变量
作用:(在单片机里常用来编辑发送AT指令)
将printf会输出的字符串,存到一个空间里(数组/堆空间) 如printf(“Hello World”); 在单片机上会通过串口发送Hello World的字符串 而在电脑上,则会在调试的时候直接输出Hello World的字符串 而sprintf(tem,“Hello World”);则相当于把Hello World字符串储存到tem变量里 eg:
- 向ESP8266发送连接WIFI的AT指令时,将WIFI用户名与WIFI密码与AT指令衔接起来,存到数组中
char cCmd [120];
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );
> strstr()函数
所在位置:string.h
函数声明:
char *strstr(const char *haystack, const char *needle)...)
haystack – 要被检索的 C 字符串。 needle – 在 haystack 字符串内要搜索的小字符串。
作用:
** 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’**
返回值:
该函数返回值为在 haystack(被查找字符串) 中第一次出现 needle 字符串(目标字符串)的位置,如果未找到则返回 NULL。
eg:
- (在与云服务器通讯时,会接收到来自云服务器的数据,这些数据均为一些字符串)解读云服务器是否发来打开LED_1的指令,若是则打开LED1否则关闭LED1
if(strstr((char *)MQTT_CMDOutPtr+2,"\"params\":{\"Switch1\":1}"))
LED_1 ON;
else
LED_1 OFF;
|