1,计数字符串个数,被调函数按需分配内存,将处理后的字符串储存在分配的内存,返还该内存的首地址

intfunction(char*source,char**rec_mem)

因为内存是被调函数申请,因此可以节约控制内存的使用;

不好的地方是,在主调内存中可能造成内存泄露

intclear(char*string_in,char**string_after)//接口设计:一级指针输入源字符串,分配新空间存放后,二级指针返还地址{//校验intcount=0;intret=0;if(string_in==NULL){ret=-1;printf("err:string_in==NULL\n");returnret;}char*str=string_in;char*str_rec;//计数while(*(str)!='\0'){if(*(str)!=''){count++;}str++;}str=string_in;//分配内存*string_after=(char*)malloc(sizeof(count+1);str_rec=*string_after;//处理,写入到新分配的内存while(*(str)!='\0'){if(*str!=''){*str_rec=*str;str_rec++;}str++;}//末尾添加结束*str_rec='\0';returnret;}

2,主调函数提供源字符串,输出区内存块

intfunction(char*source_str,char*out_str_mem)

除外空格和结束符,一律转存,内存块末尾添加结束符

intdislodge_blank_from_str(char*source_str,char*output_buffer){char*p=source_str;char*r=output_buffer;if(source_str==NULL){printf("err:source_str==NULL\n");return-1;}if(output_buffer==NULL){printf("err:output_buffer==NULL\n");return-1;}inti=0;chartemp[200]={0};while((*p)!='\0'){if((*p)!=''){temp[i]=(*p);i++;}p++;}temp[++i]='\0';i=0;while(temp[i]!='\0'){(*r++)=temp[i++];}*(++r)='\0';return0;}