#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
char *test(const char* str)
{
int i;
int str_len = strlen(str);
int num_of_char; //每次相同字符数目
char *pDes = (char*)malloc(str_len*2 + 1); //当每个字符都不相同时,压缩长度为2倍+1。
char num[10]; //单个字符数目转换成字符串后,单个字符最大数目有限制。
int num_of_des = 0;
assert(str != NULL);
num_of_char = 0;
for (i = 0; i < str_len; i++)
{
num_of_char++;
if (str[i] != str[i+1])
{
pDes[num_of_des++] = str[i];
pDes[num_of_des] = '\0';
sprintf(num, "%d", num_of_char);
strcat(pDes, num);
num_of_des+=strlen(num);
num_of_char = 0;
}
}
return pDes;
}
int main()
{
char * const p = "aaaaaaabbbbcccccccccccccccccccccccccccccccccccccccccccccgggggggggg";
puts(test(p)); //内存泄漏
}
#include <assert.h>
#include <stdlib.h>
#include <string.h>
char *test(const char* str)
{
int i;
int str_len = strlen(str);
int num_of_char; //每次相同字符数目
char *pDes = (char*)malloc(str_len*2 + 1); //当每个字符都不相同时,压缩长度为2倍+1。
char num[10]; //单个字符数目转换成字符串后,单个字符最大数目有限制。
int num_of_des = 0;
assert(str != NULL);
num_of_char = 0;
for (i = 0; i < str_len; i++)
{
num_of_char++;
if (str[i] != str[i+1])
{
pDes[num_of_des++] = str[i];
pDes[num_of_des] = '\0';
sprintf(num, "%d", num_of_char);
strcat(pDes, num);
num_of_des+=strlen(num);
num_of_char = 0;
}
}
return pDes;
}
int main()
{
char * const p = "aaaaaaabbbbcccccccccccccccccccccccccccccccccccccccccccccgggggggggg";
puts(test(p)); //内存泄漏
}