#include <stdio.h> #include <stdlib.h> #include <string.h> /******************************************************** *函 数:void delzero(char *pData, int isize) *功 能:去掉数据缓冲区(首地址为pData)中数据中的0 * (最多连续3个0)字符,数据以4个字符0终止。 *参 数:pData:数据缓冲区首地址 * isize:缓冲区最大长度 *返回值:无 //********************************************************/ void delzero(char *pData, int isize) { int i=0, j=0, count=0; char *tData, *nData; tData = pData; /*合法性检测*/ if(pData == NULL) { perror("pData:"); return; } nData = (char *)malloc(isize); //申请一段空间nData,用于存放非0字符 for(i=0,j=0; i<isize; i++) { if(*(tData+i)!= '0') { *(nData+(j++)) = *(tData+i);//非0字符存放到nData空间去 count = 0; } else { count++; if(count == 4) { memset(nData+j, '0', 4);//判断数据结束,且给数据加上结束符,即4个0字符 break; } } } memcpy(pData, nData, isize); //去掉数据段中的0且有4个0为结束符的数据拷贝给原数据地址 free(nData); //释放空间,防止内存泄露 return; } int main(void) { char str[] = "000jfdjf000JF00DKLFJ0000FJDKLJ000FLD"; delzero(str, strlen(str)); printf("str:%s/n",str); }