pwd-file_name_prepend

反思

1、数组计算中的加减1判断

很多时候关于数组的计算都会涉及到加减1问题。
原理: j-i只能得到两个之间距离多少个数,但是忽略了i本身也是一个数。

  1. n_free = p->start - p->buf
    这里的原因和第三个是一样的,因为p->start指向的位置已经写入了’/’
  2. new_p = new_buf + n_new - n_used
    new_p = new_buf + n_new - 1 - (n_used-1),两个约掉就没1了!
  3. p->start -= 1 + n
    这里不再-1的原因是:这里的p->start == p->start-1,即j = i + n -1 中的j为j-1,因为p->start指向的位置已经有值了!!!

2、C语言中的const

加入const只是在编译的时候会检查是否const的变量被改变了,若是,则抛出编译错误,然而其实编译以后都是一样的,计算机可不知道这东西是不是常量。

3、数据的构造方式更加符合实际

文件的绝对路径是逐级往上走的,所以源码中采用了更加贴合实际的数据结构(指向文件名的指针是从尾往头走的)。

代码

/* prepend the n length of s before file_name, p. */
static void
file_name_prepend (struct file_name* p, char const* s, size_t n)
{
  size_t n_free = p->start - p->buf;
  if (n > 1 + n_free)
    {
      size_t n_new = p->n_alloc * 2;
      size_t n_used = p->n_alloc - n_free;
      char* new_buf = malloc (n_new);
      char* new_p = new_buf + n_new - n_used;
      memcpy (new_p, p->start, n_used);
      free (p->buf);
      p->buf = new_buf;
      p->n_alloc = n_new;
      p->start = new_p;
    }

  p->start -= 1 + n;
  p->start[0] = '/';
  memcpy (p->start + 1, s, n);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值