我正在尝试用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
有什么问题?
答案 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的基础知识。