🔴 用系统调用走一个来回
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三个回执都要对:写了几个字节、读了几个字节、内容一不一样。
⚠️ 写一个「读够为止」的循环
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)一次 read 不保证读满,把它包成一个读够为止的函数。
一个参数都没给的时候,`argc` 是几
命令行只敲了程序名,什么参数都没带,argc 是【0】。
⚠️ `argv` 里装的是什么类型
argv[1] 拿到手的是【0】。
🔴 参数不够时,程序该怎么办
用户少给了一个必需参数,程序最该做的是【0】。
数一数给了几个开关、几个文件
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机跑程序时不带参数,所以这一节的参数都是**在 main 里造出来**,再交给 run() 的——真实工具也该这么分,才好测。 #include <std
判断「一个参数都没给」
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机跑程序时不带参数,所以这一节的参数都是**在 main 里造出来**,再交给 run() 的——真实工具也该这么分,才好测。
⚠️ 分开数:开关归开关,文件归文件
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机跑程序时不带参数,所以这一节的参数都是**在 main 里造出来**,再交给 run() 的——真实工具也该这么分,才好测。
🔴 参数是字符串,得转,还得检查转成没有
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三个参数里有一个根本不是数。
⚠️ 让程序按参数改变行为
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)认 -v 和 -c 两个开关,开关给重复了也只算打开一次。