C语言第10周在线编程测试:指针字符串与OJ避坑指南
每年到这个节点我的消息列表里总会冒出几类一模一样的问题“第10周的在线测试我本地跑得好好的怎么提交就是不过”“这个字符串题到底用指针还是用数组”“程序填空只给我几个空我根本不知道从哪下手。”C语言程序设计课程走到第10周时恰恰是很多人第一个真正的分水岭——前面的选择结构、循环、数组还能靠着“照例题改”混过去到了指针、字符串集中出现再加上在线评测系统那种“差一个空格都是错”的严格判定不少人的成绩曲线就在这里悄悄掉了头。这篇就专门聊聊这一周在线编程测试。我会把命题人最常测的几个能力点、我在反复刷这类题里验证过的高频写法、以及评测机上最容易让你翻车的细节一条条拆开讲。如果你正在赶这周的测试或者想给后面的链表和文件操作打一个好底子按顺序读一遍应该会有收获。1. 第10周线上测试到底在考什么从课程节奏倒推命题思路先别急着看代码。你越清楚这一周为什么考这些题越容易在考场上判断一道新题要用的解法。大多数版本的C语言课程到第10周时已经讲完了基本数据类型、运算符、分支、循环、一维数组、函数这些“语法骨架”正式把重心转移到整门课的灵魂——指针。围绕指针题目通常会同步带出字符串处理和多维数组的底层逻辑进度快一些的课程还会在这一周前后把结构体初步拉进来。所以第10周的在线测试本质上是在检验四件能力指针的声明、取地址、解引用、指针作函数参数字符数组与字符串常量的区别以及\0的处理二维数组在内存里的连续存储和指针遍历再用少量递归题考察“函数自己调自己”时你能不能控制住出口。我把常见题型和能力点整理了一下你可以对照着自测高频题型核心能力点典型翻车原因字符串压缩/去指定字符双指针思想、原地修改忘记补\0、连续空格误判手写字符串函数长度/拷贝/比较指针遍历、边界判断返回值写错、下标不熟练指针遍历二维数组行指针、列指针、偏移量a和*a混用、地址当值输出自定义函数交换/回写多个结果指针作参数、值传递与地址传递swap函数没传地址十进制转二进制/最大公约数递归出口、先递后归出口条件缺失、负数和零没处理1.1 为什么偏偏是第10周指针与字符串的分水岭前面几周的题哪怕你不太懂内存模型把数组下标背熟也能做对。比如求平均值、冒泡排序怎么写都能跑顶多效率低点。但指针题要求你在脑子里建立一个“地址偏移量”的模型变量有地址数组名本质是首元素地址指针变量保存的是地址*p才是它指向的值。这一层抽象没建立起来后面几乎每一步都是懵的。我见过相当多第10周的提交症状其实出在同一件事——把“数组”的思路强行套到“指针”上。举个例子有同学写字符串长度检测时把形参直接当成固定数组写死长度还有更危险的声明char *p;之后直接scanf(%s, p);。指针没有指向任何合法的内存就往里写数据轻则段错误重则把别的变量冲掉整个程序输出变成一串随机数。第10周在线测试的第一个意义就是把这类“看着能跑、换个输入就崩”的代码筛出来逼你把内存模型想清楚。1.2 在线评测的“隐藏规则”样例、时空与逐字比对和本地IDE最大的区别是判定方式。在线评测系统拿到你的程序后会在服务器上编译、运行然后把你的输出与标准答案文件做一个逐字符比对——空格、换行、大小写全部算数。本地IDE里你看到的“结果对”只是人眼判断服务器可比对得更狠。第10周编程题的数据量通常不大超时TLE和超内存MLE不是主要矛盾真正卡人的是答案错误WA和格式错误PE。所以拿到题之后第一件事不是赶紧写代码而是把输入格式、输出格式各读三遍每个数字之间是空格还是换行行末允许多余空格吗题目要求的是“每组一行”还是“最后汇总一次”这些信息全都写在题面里全都能决定你最终拿不拿得到分。2. 三类高频题型拆解与代码落地这一节给三类我最常看到的第10周题型各配一个可直接参考的代码写法。代码不是唯一答案但思路是经过验证的你可以顺着它去套同类题。2.1 字符串处理考察数组下标和指针移动字符串题看起来考“字符串”实际考的是“双指针”思想一个读指针负责扫描源头一个写指针负责写到目标位置两个人配合完成过滤、压缩、替换。下面这道“把连续空格压缩成单个空格”非常典型我直接给出一种参考实现#include stdio.h #include string.h // 将 src 复制到 dst并把连续的空格压缩为单个空格 void compress_spaces(const char *src, char *dst) { int flag 0; // flag 1 表示上一个字符是空格 while (*src ! \0) { if (*src ) { if (!flag) { // 只在第一次遇到连续空格时输出一个空格 *dst ; flag 1; } } else { *dst *src; flag 0; } src; } *dst \0; // 千万记得补结尾符 } int main() { char line[1024]; char result[1024]; fgets(line, sizeof(line), stdin); line[strcspn(line, \n)] \0; // 去掉 fgets 读进来的换行 compress_spaces(line, result); puts(result); return 0; }这里有一个关键选择为什么要用flag标记上一个字符是不是空格而不是只比较当前字符和下一个字符因为连续三个空格发生时只看相邻一个字符根本判断不了“该保留第几个”。用状态变量逻辑就变成“每段连续空格只放一个空格”非常稳定。另一个细节是这个代码里用了fgets而不是gets。老教材常用gets但它没法限制读入长度在新标准里已经被移除了在线评测环境很可能直接编译报错。fgetsstrcspn去换行是个稳妥组合建议直接记下来。2.2 指针与多维数组从“看着懂”到“手会写”第10周还常出现二维数组配合指针的题比如“用指针计算矩阵对角线元素之和”“按指针方式输出矩阵”。二维数组和指针的关系特别容易绕因为数组名a、a[0]、*a的数值经常相等但类型完全不同。a是二维数组首行的地址a[0]是第0行首个元素的地址*(ai)等价于a[i]取出第i行的首地址*(ai)j是第i行第j个元素的地址再解引用一层*(*(ai)j)才是真正的值。很多人栽在“只解引用一层把地址当成值输出”。#include stdio.h int main() { int matrix[3][3] { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int main_diag 0; int anti_diag 0; for (int i 0; i 3; i) { main_diag *(*(matrix i) i); // 主对角线 anti_diag *(*(matrix i) (2 - i)); // 副对角线 } printf(%d %d\n, main_diag, anti_diag); return 0; }理解*(*(matrix i) i)时可以把它拆成两步第一步matrix i让指针跳到第i行第二步通过*(matrix i)拿到该行首元素的地址第三步再偏移i个元素并解引用。这三步缺一不可。写错的原因通常是记混了“行”和“行首元素”这两层概念matrix i得到的是第i行的地址而不是第i行第0个元素的地址虽然数值可能相同但类型不同直接参与后续运算时结果就差之千里。2.3 递归与函数设计规模小但坑不少递归题典型的有十进制转二进制、最大公约数、快速幂。递归本身不复杂翻车点反而在细节上出口条件没覆盖最小输入、负数没处理、整数最小值取负会溢出。下面是一个十进制转二进制的写法顺手把负数情况也处理了#include stdio.h void to_binary(long long n) { if (n 1) { to_binary(n / 2); } putchar(0 (int)(n % 2)); } int main() { int n; scanf(%d, n); if (n 0) { putchar(0); } else if (n 0) { putchar(-); to_binary(-(long long)n); // 防止 INT_MIN 取负时溢出 } else { to_binary(n); } putchar(\n); return 0; }这个写法有个很值得琢磨的顺序先递归、后输出。to_binary(2)会先调to_binary(1)等to_binary(1)输出1之后再回到2这一层输出0最终得到10。利用“递归调用在输出之前”来天然实现逆序比用一个数组倒过来放要干净得多。注意负数和零是递归题最容易漏掉的输入。题目范围写“整数”时默认就包含了负数和零。你哪怕把核心逻辑写对了漏掉这两个分支提交结果依然是WA而且因为样例多半是正数你本地根本看不出来。3. 五个最容易在评测机上翻车的C语言陷阱代码逻辑“看起来对”和在线评测“判定通过”之间隔着五个非常经典的坑。第10周以后这些坑会反复出现一个个说清楚。3.1 scanf读完数后留下的换行符scanf(%d, n);读走数字之后缓冲区里还会留着一个换行符\n。如果你紧接着用fgets读字符串或者用另一个scanf(%c, ch)读字符读到的就是那个残留的换行字符串开头会莫名消失字符变量会得到10这个ASCII值。在本地IDE里你通常会一个个手输数据注意力在屏幕上不太能察觉到这个残留但评测系统用文件重定向输入时这个坑会实打实暴露。解决办法很简单在读字符串/字符前用while (getchar() ! \n);把缓冲区清一次或者干脆统一用fgets读整行再用sscanf去解析这样根本不存在残留换行的问题。3.2 字符串末尾的\0与缓冲区边界定义字符数组时长度必须为“字符数 1”因为最后一位要塞\0。char a[10]; scanf(%s, a);最多应该只能安全接收9个字符第10个位置要留给结尾符。可很多同学写char a[100];时心里想的是“我不会输入满100个”结果评测数据里偏偏出现边界长度数组越界、字符串末尾缺\0输出就可能带着一截乱码。这类bug在第10周尤其多因为字符串题密集出现大家开始频繁定义字符数组却把“长度要加1”这个细节忘得干干净净。样例给的都是hello这种短字符串你发现不了问题评测数据一旦恰好填满边界就是越界写轻则WA重则直接RE。3.3 栈上的大数组与内存越界题目如果写“矩阵大小不超过1000×1000”你直接在main函数里写int a[1000][1000];很多在线评测环境会直接让程序崩溃。这不是逻辑错误而是这个数组占4MB左右的栈空间超出了默认栈大小。程序还没执行到你的算法就在变量声明阶段崩了。稳妥方案有两个把大数组定义成全局变量全局区空间比栈大得多或者用malloc在堆上动态分配。判断标准很简单数组元素个数乘以单个类型大小如果超过几百KB就别放在函数内部栈上了。第10周的数据规模再大也有限但这个习惯要提前养成因为后面链表、文件操作里会遇到更大的内存布局问题。3.4 变量初始化与重复运行残留局部变量不显式初始化时它的值是“不定值”而C语言不会自动把局部变量清零。这个坑最阴的地方在于随机性某一次运行栈上恰好是0结果正确下一次运行栈上残留了别的值结果就错了。累加和忘记sum 0;、计数器忘记count 0;都属于这一卦。评测系统会反复用不同输入运行你的程序这种未初始化变量的“概率性错误”就会被放大。我的建议很土但很有效函数开头把所有变量全部显式初始化。哪怕你确信它用不到初值也先写一个0在那边。这一条付出的成本约等于零收益是少掉一大批莫名其妙的结果。3.5 输出格式的“精确匹配”格式错误是第10周在线测试的重灾区。题目说“每个数之间用空格分隔末尾无多余空格”很多人写循环遍历时习惯用printf(%d , a[i]);结果最后一个元素后面也多了一个空格输出比对直接判错。还有字符串大小写、有没有空行、最后有没有换行全在比对范围内。我的做法是每次提交前自己构造一个和样例完全一致的输入然后盯着输出和样例比一遍连看不见的空格都要比。本地IDE的“运行”按键不会告诉你“你的空格比标准答案多”只有逐字符敏感才能过这道关。4. 一次WA提交的完整排查链路从报错反馈到AC只看规律不实践效果有限。下面我用一次真实的排查过程来演示你遇到WA时可以照着这个链路走一遍。4.1 先把反馈读懂AC之外的五种状态提交之后的反馈不是只有“过”和“不过”通常有下面几种反馈状态含义最常见诱因AC全部测试用例通过—WA输出和标准答案不一致边界条件、算法逻辑、输入解析有误PE输出内容对格式不对多余空格、换行位置不对、大小写错误TLE运行超时死循环、算法复杂度太高RE运行崩溃数组越界、指针未分配、递归栈溢出CE编译错误语法不规范、变量重名、用了老版本环境不支持的语法WA之后不要急着改代码。先把题目完整重读一遍问自己三件事输入是不是多组数据结束标志是什么输出是每组一行还是最后汇总一次我见过很多WA根本不是算法问题而是把“读到文件尾为止”的多组输入当成了一组处理。4.2 边界输入与本地复现拿到WA之后最有效的动作是构造边界用例。题目说“1≤m,n≤100”就先试m1,n1字符串题要试空串直接一个空行递归题要试递归深度最大的情况。然后翻代码分三段定位先确认“读入对不对”再确认“处理对不对”最后确认“输出对不对”。最直接的手段是临时加printf把中间变量的值打到屏幕上看断点在哪段逻辑。我印象很深的一次有人做统计单词个数的题本地样例全对提交就是WA。我让他输入含连续三个空格的句子试一下结果马上露馅——他把连续空格也当成单词分隔符凭空多算了一个单词。这个例子说明评测样例通常很“友好”真正的边界往往藏在题目范围描述的角落。边界输入这一关一票否决。4.3 定位、修复与回归验证定位到问题之后修复要小步快跑一次只改一处改完立刻重新提交。不要一次改五处然后祈祷否则连“到底是哪一处修好的”都不知道更不知道新问题是谁引入的。改完之后把之前所有构造过的用例——包括边界用例——全部再跑一遍确保修A问题没有弄坏B功能。如果你发现改了这处、那处原有的代码也开始崩了最常是两个原因一是修改影响了共同函数二是某个变量的生命周期改变初始化位置和原来不同。AC之后也别急着关页面再对着代码过一遍“数组长度、指针复位、输出空格”这三条这些检查在下一道题里仍然能救命。5. 避免第10周翻车的日常训练方法前面说的都是具体题目的解法但真正能让你稳定不翻车的是几套可以带进考场的习惯。这节聊方法。5.1 用限时和书面步骤模拟考试在线测试的压力主要来自时间。平时练习时我建议给自己加一个倒计时简单题20分钟中等题40分钟。时间到若还没AC先停手别埋头继续调而是把思路写下来用一句话说明你当前的“假设”。比如“我假设输入永远只有一组”“我假设字符串长度不超过50”。然后逐一验证这些假设你会发现大部分WA都来自某个你习以为常但根本没验证的假设。这个动作看着简单但比盲目改代码有效得多因为它逼你把注意力从“代码”转移到“题面约束”上。5.2 刻意练习“读懂报错”很多同学只在提交时看反馈写代码时几乎不看编译警告。可编译器在你按下编译键的那一秒就把问题线索全摆在屏幕上了未初始化的变量、类型不匹配、非void函数某个分支没有返回值。第10周开始代码变长、指针变多这些警告的价值直线上升。我自己会把警告当成错误级别对待尤其是warning: control reaches end of non-void function。这条几乎就在明示你的函数某个分支漏了return一旦走到那个分支函数就会返回一个随机值后面的判断全部跟着错。如果能在提交前就把这些警告清干净你的WA率会肉眼可见地下降。5.3 给自己准备一份提交前检查清单最后把我用了很多轮的检查清单完整贴出来第10周以及后面的每一次提交都可以对着它自查数组长度确认字符串数组有没有预留\0的位置指针有没有指向合法内存绝不能char *p; scanf(%s, p);。输入是不是多组循环结束条件写对了吗输出有没有行末多余空格、缺末尾换行所有累加器、计数器是否显式初始化了递归函数的出口是否覆盖最小输入零、负数、一个元素大规模数组是否用了全局变量或动态分配而不是放在函数栈里这七条看着琐碎但第10周以后我遇到的每一道翻车题几乎都能对应到其中至少一条。把这些检查变成肌肉记忆之后很多原本要提交三四次的问题头一回就能过。最后再分享一个小技巧是我自己反复验证过的AC之后别急着收工把同一道题换一种思路再写一遍。比如字符串压缩你用双指针写完就可以试着用递归重写二维数组你用下标写完就可以用行指针重写。第10周的题量看起来多真正值得反复做的是那些能同时串起指针、字符串、结构体三个知识点的综合题。用“一题多写”代替“多题一写”到了链表和文件操作阶段你会发现所有第10周踩过的坑都在帮你提前扫雷。

相关新闻

团队聚会问题解析:时间区间合并与边界处理实战

团队聚会问题解析:时间区间合并与边界处理实战

这周的限时大模拟碰到一道非常经典的“团队聚会”题,题面很短,但信息密度很高:一群人分别给出自己的若干忙碌时间段,要在给定时间范围内找出所有能让全员一起开会、并且持续时间至少 h 小时的连续空闲时间。第一次看到这种题&…

2026/10/13 20:58:51 阅读更多 →
数据可视化期末考察全攻略:从选题逻辑到答辩避坑

数据可视化期末考察全攻略:从选题逻辑到答辩避坑

每到期末,我都会迎来一波“可视化期末考察”的咨询潮。这几年既带过学生、也当过评审,我看到的作品大概分两派:一派用各种酷炫图表把页面塞得满满当当,答辩时除了“图很多”挤不出几句分析;另一派只做了三张图&#xf…

2026/10/13 20:57:50 阅读更多 →
Spine 3.8.75 完全指南:骨骼动画版本冻结与运行时避坑实践

Spine 3.8.75 完全指南:骨骼动画版本冻结与运行时避坑实践

简介:Spine 3.8.75 是一款稳定的2D骨骼动画制作工具,主要面向游戏开发团队、独立动画师以及动效设计师,该版本功能成熟,适合制作角色动画、技能特效和角色绑定。整个压缩包共758个文件,体积为71.68MB,文件类…

2026/10/13 20:57:50 阅读更多 →

最新新闻

数据库原理中的网状模型:数据结构、完整性约束与应用解析

数据库原理中的网状模型:数据结构、完整性约束与应用解析

简介:数据库原理(第四版)课件面向数据库初学者与从业人员,以十章内容系统讲授数据库系统开发全流程与核心理论。资源包为1个PPT文件,压缩包约289KB,便于直接下载翻看,当前已有168人学习。课件从…

2026/10/13 21:45:38 阅读更多 →
企业级工程能力与大模型应用落地:Java工程师的AI转型实战

企业级工程能力与大模型应用落地:Java工程师的AI转型实战

这两年耳边总有人在争论“Java是不是过气了”“程序员会不会被AI取代”,但我在实际项目里的体感完全不是这样。真正稀缺的,从来不是会调某个大模型API的能力,而是一整套把“会说话的模型”变成“能稳定服务业务的系统”的工程能力——也就是标…

2026/10/13 21:45:38 阅读更多 →
ACM程序设计基础结课总结:从复杂度分析到动态规划与图论的完整学习路径

ACM程序设计基础结课总结:从复杂度分析到动态规划与图论的完整学习路径

ACM程序设计基础这门课终于结课了。说实话,这门课和我一开始想象的不太一样——我本来以为只是多刷一点题、背几个模板,真正学下来才发现,它练的是把抽象问题翻译成高效程序的整套思维习惯。课程没有一上来就堆高级算法,而是从输入…

2026/10/13 21:45:38 阅读更多 →
Agent-Skills:面向AI智能体的可复用原子化能力设计与工程实践

Agent-Skills:面向AI智能体的可复用原子化能力设计与工程实践

1. 项目概述:Agent-Skills 不是新概念,而是智能体落地的“肌肉记忆”“Agent-Skills”这个词最近在技术社区里频繁冒头,但它既不是某个开源库的新版本号,也不是某家大厂刚发布的黑科技产品名。它本质上描述的是一类可复用、可组合…

2026/10/13 21:45:38 阅读更多 →
连衣裙退货率逼近90%?逆向物流成本与退货管理策略全解析

连衣裙退货率逼近90%?逆向物流成本与退货管理策略全解析

全球物流业进入“退货季”,女士连衣裙退货率接近90%最近圈子里最热的话题,不是哪条航线又涨价了,也不是哪家港口又堵了,而是“退货季”这三个字。每年大促结束后,全球物流网络都会迎来一波逆向高峰,而今年最…

2026/10/13 21:45:38 阅读更多 →
张量不是高维数组:坐标变换下的不变性本质

张量不是高维数组:坐标变换下的不变性本质

1. 张量不是“高维数组”的别名,而是坐标变换下的不变性语言你翻过任何一本深度学习框架文档,十有八九会在第一章看到“张量(Tensor)是N维数组”这个说法。我带过三届算法实习生,几乎所有人第一次听到这句话时都松了口…

2026/10/13 21:44:37 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →