1,计数字符串个数,被调函数按需分配内存,将处理后的字符串储存在分配的内存,返还该内存的首地址
int function (char *source, char **rec_mem)
因为内存是被调函数申请,因此可以节约控制内存的使用;
不好的地方是,在主调内存中可能造成内存泄露
int clear(char *string_in, char **string_after) //接口设计:一级指针输入源字符串,分配新空间存放后,二级指针返还地址
{
//校验
int count = 0;
int ret = 0;
if (string_in == NULL ){
ret = -1;
printf("err: string_in == NULL\n");
return ret;
}
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';
return ret;
}
2,主调函数提供源字符串,输出区内存块
int function(char *source_str, char *out_str_mem)
除外空格和结束符,一律转存,内存块末尾添加结束符
int dislodge_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;
}
int i = 0;
char temp[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';
return 0;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。