coreutils4.5.1 name.c源码分析2
前几天又重新读了 name.c对其中去掉后缀的那段,终于理解了。现总结如下;
static void
remove_suffix (char *name, const char *suffix)
{
char *np;
const char *sp;
np = name + strlen (name);
sp = suffix + strlen (suffix);
while (np > name && sp > suffix)
if (*--np != *--sp)
return;
if (np > name)
*np = \'\\0\';
}
其中关键是while循环,当初我不理解,心想,其中return不是跳出了程序吗?当时想,如果部分后缀相等,那岂不是不会截断了,如下
./ name /a/b/c2.ok3 xk3
结果是:
c2.ok3
验证了我的猜想,因为当只有部分相等时,此时是return出来了。只有后缀完全相等,时,此时,(np > name && sp > suffix)不满足了,为此跳出循环,执行
if (np > name)
*np = \'\\0\';
把文件名中末尾和后缀相等的部分直接去掉。
作者对字符串处理的部分出神入化,不佩服都不行呀。
继续阅读与本文标签相同的文章
上一篇 :
库克:iPhone11系列销售情况非常好
下一篇 :
苹果第四财季营收为640亿美元,同比增长2%
-
python运算符
2026-05-18栏目: 教程
-
史上最强多线程面试44题和答案:线程锁+线程池+线程同步等
2026-05-18栏目: 教程
-
9月最新184道阿里、百度、腾讯、头条Java面试题合集
2026-05-18栏目: 教程
-
美团携手世界粮食计划署共推“拒绝隐性饥饿”健康饮食倡导行动
2026-05-18栏目: 教程
-
圆通回应“承诺达”解散:由直营模式改回加盟商授权经营
2026-05-18栏目: 教程
