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

《C语言阿呆指南》中James Bond链表代码无输出问题排查咨询

无输出问题排查与修复

根本故障点

  • 致命语法疏漏:bonds数组初始化时,相邻的字符串条目之间没有加逗号分隔。这个疏漏很容易在抄录排版书籍代码时出现,看似和书中内容完全一致,实际遗漏了数组元素的分隔逗号。按照C语言的字面量拼接规则,这些被连写的字符串会被编译器合并为一个单独的超长字符串,原本预期的6个独立数组元素实际只剩1个。
  • 连锁运行异常:数组长度匹配RECORDS=6的前提下,实际仅有的1个拼接后的超长字符串被反复拷贝到每个链表节点的25字节actor数组中,触发堆内存缓冲区溢出,程序在循环填值阶段就直接异常终止,根本执行不到后续的打印逻辑,因此控制台没有任何输出。
  • 编译依赖缺失:代码中使用了malloc、strcpy、printf三个标准库函数,但没有在文件开头引入对应头文件,部分严格模式的编译器会直接阻断编译流程,也会导致无法生成可运行的正确程序。

修复操作

  1. 补全头文件与宏定义,放在代码最起始位置:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RECORDS 6
  1. 修正bonds数组的初始化写法,为每个字符串条目添加逗号分隔:
char *bonds[RECORDS]= {
    "Sean Connery",
    "David Niven",
    "George Lazenby",
    "Roger Moore",
    "Timothy Dolton",
    "Pierce Brosnan"
};
  1. 可选健壮性优化:为malloc的返回值添加空指针判断,避免内存申请失败时的访问崩溃:
first_item = (struct jb *)malloc(sizeof(struct jb));
if (first_item == NULL) {
    printf("内存申请失败\n");
    return 1;
}

修复完成后运行程序,即可正常输出预期的6条结构内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 06:45:07