只有指针类型的数据才能释放
寄存器地址强制类型转换成32位的指针
将立即数转换成指针 立即数 (Rcc_Base+0x18) 电脑不认识 立即数 所以要转换成指针
将地址转换成指针: (unsigned int*)(Rcc_Base+0x18)
取出上面指针的地址 *(unsigned int*)(Rcc_Base+0x18)
*a 是指针变量 存的是地址
**a 是取内容
C想要获取特定区域的字符
用 strstr 计算第一个指定字符所在区域 的指针
strstr(b,"$GNGGA")+1; 操作后的数据就是从 指定字符的位置开始的
strstr(b,"\n"); 找到结束处的指针
b[sumb-sumc] = '\0'; 将b指针结束的位置换成 两个指针长度相减的长度 就是你需要的长度了
char *a =( char*)&gps_rbuff[0];
char *b=a;
char *c ;
int sumb =0;
int sumc= 0;
//substring(b,a,);
while(strstr(b,"$GNGGA") != NULL)
{
b = strstr(b,"$GNGGA")+1;
sumb = strlen(b);
c = strstr(b,"\n");
sumc = strlen(c);
b[sumb-sumc] = '\0'; 将b指针结束的位置换成 两个指针长度相减的长度 就是你需要的长度了
}
C语言截取从某位置开始指定长度子字符串方法
以strncpy为例:
char dest[4] = {""};
char src[] = {"123456789"};
strncpy(dest, src, 3);
puts(dest);
输出结果为 123
看到了吗,strcpy函数中的参数是字符串数组的名字,而数组名本质上是指针,那么,src+3 就可以实现将 src中从第4个字符开始复制n个字符给 dest 了
char dest[4] = {""};
char src[] = {"123456789"};
strncpy(dest, src+3, 3);
puts(dest);
输出结果为 456
---------------------------------------------分割字符串和 截取字符串 案例--------------------------------------------------------------
result = strtok(b,",");
while(result!=NULL){
count++;
if(count ==2 && strlen(result)==6){
/* hhmmss */
for(i=0;i<strlen(result);i++){
if(i<2){
strncpy(hour,result,2);
}else if( i>=2 && i<4){
strncpy(min,result+2,2);
}else if(i>=4){
strncpy(sec,result+4,2);
}
}
}else if(count ==4 && strlen(result)>7){
/* ?3?è */
strncpy(lat,result+2,2);
strcat(lat,".");
strncpy(lat1,result+2,2);
strcat(lat,lat1);
strncpy(lat1,result+5,strlen(result-5));
strcat(lat,lat1);
}else if(count ==6 && strlen(result)>7){
/* ?-?è */
strncpy(lon,result+2,2);
strcat(lon,".");
strncpy(lon1,result+2,2);
strcat(lon,lon1);
strncpy(lon1,result+5,strlen(result-5));
strcat(lon,lon1);
}else if(count ==10 && strlen(result)==6){
/* ddmmyy(è????ê) */
strncpy(year,result+4,2);
strncpy(mon,result+2,2);
strncpy(day,result,2);
}
result = strtok(NULL,",");
}
----------------------------------------数组内存回收
memset(GPSInfo,0,strlen(GPSInfo));
----------------------------------------指针变量内存回收
char *a="";
free(a);
a=NULL;
STM32 中能不用free 最好不用 会导致一些不可预知的错误
-----------------------------------------拼接字符串
char content[120];
sprintf(content, "\r\n %d GPSData: 经度 %d ,纬度: %d, data:%d ,time: %d , hour: %d ,min: %d, sec: %d ", count,latitude,longitude
,gpsdate,gpstime,gpshour,gpsmin,gpssec);