把中间值都摆出来
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机上跑不了 gdb,所以这一节练的是**同一件事的另一半**:**把 gdb 会告诉你的东西,自己在程序里打出来。**会读会打,换到有 gdb 的地方一样用。
⚠️ 自己做一份调用栈
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三层函数,记下最深进到第几层。
🔴 让它别崩,改成交回一个能看的值
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三次调用里有两次是坏的。挡住它们,交回 -1。
⚠️ 把「挡住了几次」也数出来
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)挡住的都交回 -1,数一数有几次。
🔴 `strcpy` 最容易出的事是什么
strcpy(buf, s) 最常见的事故是【0】。
⚠️ 两个转数函数该用哪个
把命令行参数转成整数,更该用 strtol,因为【0】。
几个最常用的字符串函数
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)长度、拷贝、拼接、比较: #include <stdio.h> #include <string.h> int main(void) {
🔴 `snprintf` 交回的到底是几
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)缓冲区只有 5 个字节,要写的却更长: #include <stdio.h> #include <string.h> int main(void
拷一份,再接一段
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)buf 有 16 个字节,够用。
⚠️ 用能报截断的那个写法
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)缓冲区只有 5 个字节,要写的内容比它长。