只有指针类型的数据才能释放 寄存器地址强制类型转换成32位的指针 将立即数转换成指针 立即数 (Rcc_Base+0x18) 电脑不认识 立即数 所以要转换成指针 将地址转换成指针: (unsigned int*)(Rcc_Base+0x18) 取出上面指针的地址 *(unsigned int*)(Rcc_Base+0x18) *a 是指针变量 存的是地址 **a 是取内容 C想要获取特定区域的字符 用 strstr 计算第一个指定字符所在区域 的指针 strstr(b,"$GNGGA")+1; 操作后的数据就是从 指定字符的位置开始的 strstr(b," "); 找到结束处的指针 b[sumb-sumc] = ' '; 将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," "); sumc = strlen(c); b[sumb-sumc] = ' '; 将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, " %d GPSData: 经度 %d ,纬度: %d, data:%d ,time: %d , hour: %d ,min: %d, sec: %d ", count,latitude,longitude ,gpsdate,gpstime,gpshour,gpsmin,gpssec);