You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中实现RLE?我的代码输出为空,求技术帮助

问题排查与修正

你的代码存在多个关键问题,导致输出异常,下面逐一说明并给出修复后的版本:

核心错误点

  • 返回值类型错误:函数声明为char rle(char src[]),但实际需要返回字符串(字符指针),应该改为char* rle(const char src[])(加const表示输入字符串只读)。
  • 结果字符串初始化错误:char res = ""; 把字符串常量赋值给单个字符变量,完全错误。需要使用动态分配的内存或者足够大的缓冲区来存储结果,这里推荐用动态分配,避免缓冲区溢出。
  • 循环变量未初始化:for (int i; i < len; i++) 中的i没有初始值,会导致随机起始位置,应该改为for (int i = 0; i < len; )(注意去掉i++,因为内层while已经在递增i)。
  • 越界访问问题:内层while循环中i++会导致i超过字符串长度,访问src[i]时越界,需要在循环条件里加上i < len。
  • 字符串拼接逻辑错误:res+=src[tmp] + snprintf(NULL,0,"%d",count); 这种写法完全不符合C语言字符串操作逻辑,snprintf返回的是格式化后的字符数,不是字符串,而且不能直接用+=拼接字符和数字。需要用snprintf把字符和计数格式化到结果缓冲区里。
  • 未处理最后一组字符:原循环结束后没有把最后一组的字符和计数加入结果。

修复后的代码

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

char* rle(const char src[]) {
    // 处理空输入
    if (src == NULL || src[0] == '\0') {
        char* empty = malloc(1);
        if (empty) empty[0] = '\0';
        return empty;
    }

    int len = strlen(src);
    // 预估结果缓冲区大小:最坏情况每个字符都是单独的,比如"abcde"会变成"a1b1c1d1e1",长度是2*len+1
    char* res = malloc(2 * len + 1);
    if (!res) return NULL; // 内存分配失败返回NULL

    char current = src[0];
    int count = 1;
    int res_idx = 0;

    for (int i = 1; i < len; i++) {
        if (src[i] == current) {
            count++;
        } else {
            // 把当前字符和计数写入结果
            res_idx += snprintf(res + res_idx, 2 * len + 1 - res_idx, "%c%d", current, count);
            current = src[i];
            count = 1;
        }
    }
    // 处理最后一组字符
    res_idx += snprintf(res + res_idx, 2 * len + 1 - res_idx, "%c%d", current, count);
    res[res_idx] = '\0'; // 确保字符串以'\0'结尾

    return res;
}

int main(int argc, char *argv[]) {
    char* result = rle("aaaaa");
    printf("%s\n", result);
    free(result); // 记得释放动态分配的内存,避免内存泄漏
    return 0;
}

说明

  1. 用malloc动态分配结果缓冲区,预估足够大的空间,避免溢出。
  2. 遍历字符串时,统计连续相同字符的数量,遇到不同字符就把当前统计结果写入缓冲区。
  3. 最后处理循环结束后剩下的最后一组字符。
  4. 加入了空输入的处理,以及内存分配失败的判断。
  5. 主函数中使用完结果后记得free,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Behrad Sharifi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:13:28