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
相关产品推荐
相关产品推荐

