C指针说明

只有指针类型的数据才能释放


寄存器地址强制类型转换成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);

 

posted on 2018-04-19 11:56  LKit  阅读(322)  评论(0编辑  收藏  举报