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

C语言实现最长公共后缀功能时输出垃圾值问题求助

代码问题排查及修复

直接导致输出垃圾值的核心错误

你在给suffix数组赋值的代码行中,误使用了相等比较运算符==而非赋值运算符=,该语句仅做了数值比较,没有任何赋值操作,suffix数组保留了栈内存的初始随机值,因此输出为乱码。

// 错误写法
suffix[k] == word2[end - count + z];
// 正确写法
suffix[k] = word2[end - count + z];

其他需要修复的逻辑错误

  • 公共后缀长度统计逻辑错误:公共后缀是从末尾向前连续相等的字符序列,你当前的实现未在遇到第一个不相等字符时终止遍历,会统计所有位置匹配的字符而非连续后缀,同时没有判断两个字符串长度差异,可能出现数组越界访问。
  • 存在缓冲区溢出风险:固定长度的suffix数组仅分配了20字节,当公共后缀长度超过19时会发生缓冲区溢出,破坏内存数据。

修复后完整代码

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

void longest_suffix(char word1[], char word2[]) {
    int len1 = strlen(word1);
    int len2 = strlen(word2);
    // 取两个字符串的较小长度作为最大对比长度,避免越界
    int min_len = len1 < len2 ? len1 : len2;
    int common_suffix_len = 0;

    // 从末尾向前逐字符对比,遇到不匹配立即停止
    for (int i = 1; i <= min_len; i++) {
        if (word1[len1 - i] == word2[len2 - i]) {
            common_suffix_len++;
        } else {
            break;
        }
    }

    // 限制最大存储长度,避免缓冲区溢出
    char suffix[20];
    int copy_len = common_suffix_len < 19 ? common_suffix_len : 19;
    for (int k = 0; k < copy_len; k++) {
        suffix[k] = word2[len2 - copy_len + k];
    }
    suffix[copy_len] = '\0';
    printf("%s", suffix);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:10