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

C语言构建char后缀数组时为何出现null chars导致输出错误?

问题原因
  • 数组越界访问:你定义的字符数组s长度为7,合法下标范围是0~6。代码中判断j<7时就执行j++,当j初始值为6时,判断条件成立后j会自增为7,后续访问s[7]已经超出数组的合法范围,属于未定义行为,读取到的是内存中不确定的脏数据,就是你观察到的空字符的来源。
  • 后缀截取逻辑错误:7个字符的所有后缀长度是依次递减的,分别为7、6、5、4、3、2、1,总和刚好为28。但你当前的逻辑是每个后缀都固定读取8个字符(从k到7共8个下标),不仅包含越界的脏数据,还会因为总长度限制导致后续后缀无法完整输出,和你给出的实际输出表现完全吻合。
修复代码
#include <stdio.h>
#include <stdlib.h>

static char *suffix;

int main()
{
    char s[7] = {'c','o','n','n','e','c','t'};
    suffix = (char*)malloc(sizeof(char)*28);
    int write_pos = 0;
    // 遍历每个后缀的起始位置
    for (int start = 0; start < 7; start++) {
        // 每个后缀的长度为 7 - start
        for (int i = start; i < 7; i++) {
            suffix[write_pos] = s[i];
            printf("%c ", suffix[write_pos]);
            write_pos++;
        }
        // 不同后缀之间加空格分隔,不需要可删除
        printf(" ");
    }
    // 动态分配内存用完记得释放
    free(suffix);
    return 0;
}

修复后运行会输出完整的所有后缀字符,总长度刚好为28,不存在越界访问问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04