C语言实现echo程序第10行非参数末尾输出空格的原因
echo程序第10行空格输出逻辑的作用说明
问题描述
这是echo工具程序,它从控制台读取命令行参数并将参数回显输出到控制台。下方是对应实现的C语言代码,其中第10行在尚未遍历到最后一个命令行参数时会向控制台写入一个空格,该设计的作用与原因如下:
#include "kernel/types.h" #include "kernel/stat.h" #include "user/user.h" int main(int argc, char *argv[]) { int i; for(i = 1; i < argc; i++){ write(1, argv[i], strlen(argv[i])); if(i + 1 < argc){ write(1, " ", 1); //line 10 } else { write(1, "\n", 1); } } exit(0); }
设计原因
- 还原参数的自然分隔效果:命令行传入的多个参数在输入时靠空格分隔,但是传入main函数的argv数组只会存储拆分后的参数内容,不会保留参数之间的分隔空格。如果遍历输出参数时不主动在相邻参数间插入空格,所有输出内容会直接拼接成无间隔的连续字符串,比如执行
echo hello xv6会输出helloxv6,完全不符合用户对echo命令的输出预期。 - 避免多余的尾部空格:该判断逻辑仅在非最后一个参数后输出空格,最后一个参数输出完成后直接写入换行符,不会在整行内容的末尾额外添加无意义的空格。如果不加判断给所有参数后都补空格,输出行尾会多出一个冗余空格,既不符合标准命令行工具的输出规范,也可能在后续通过管道传递echo输出给其他程序时,因多余空格触发意料之外的逻辑错误。
内容的提问来源于stack exchange,提问作者Aries Zhao
相关产品推荐
相关产品推荐

