运行长度用C编码,strcat问题

时间:2019-02-12 09:50:52

标签: c string pointers malloc strcat

我正在尝试用C语言编写一个行程编码程序。

对于输入“ ABBCD”,我希望得到以下结果:“ A1B2C1D1”

我将二维char数组行换为用于编码字符的函数的行:

for(i; i <= curline; i++)    //hand over line for line
{
    encoded->lines[i] = malloc(255);
    encoded->lines[i] = rle_encode(read->lines[i]);   //read->lines contains the characters of each line
    printf("%s", encoded->lines[i]);  // print out the result returned by the function rle_encode
}

我已经对此进行了测试,并且知道它会起作用。

现在这是我的函数rle_encode:

char *rle_encode(char *line){
char *encode = malloc(sizeof(2 * strlen(line) + 1));
char prev = line[0];   //here I want to save the previous character

int i = 0;
int z = 1;
do{
    i++;
    if(prev == line[i])     // if character n equals n-1 (previous)
    {
        z++;                // increase counter varaible z
    }else
        {
            strcat( encode, line[i] );      //the content of line[i] will be append to the array encode
            strcat( encode, z );   //also the counter variable will be appended
        }
    prev = line[i];

}while(line[i] != '\n');     //in the end of each line a '\n' appears, if line[i] is '\n' it should stop the function

return encode;}

函数rle_encode有什么问题?

2 个答案:

答案 0 :(得分:1)

malloc(sizeof(encode))

sizeof(encode)是指针的大小,因此您只能为其分配4或8个字节。

我认为您还必须从0开始而不是从1开始计数i和z。

编辑: 有很多问题,我没有全部标记。

答案 1 :(得分:0)

这不是您问题的完整答案,因为代码中还有许多其他问题。

这个小程序演示了如何将char附加到字符串以及如何将int的十进制表示附加到字符串。

#include <stdio.h>
#include <string.h>

int main(void)
{
  char encode[100] = "abc";

  printf("%s\n", encode);

  // append the char 'X' to the encode string
  int len = strlen(encode);
  encode[len] = 'X';
  encode[len + 1] = 0;       // put the NUL terminator

  printf("%s\n", encode);

  // append the decimal representation of the int y to encode

  int y = 123;
  char *p = encode + strlen(encode);
  sprintf(p, "%d", y);

  printf("%s\n", encode);
}

输出:

abc
abcX
abcX123

您真的需要学习C的基础知识。