c陷进与缺陷笔记(1)

2011-11-13

只需记住 a[i]  相当于  *(a+i)


考虑不对称边界偏好 让指针指向第一个未背占用的字符

*bufptr++ = c;

//缓冲区申明

define N 1024
static char buffer[N];
static char *bufptr = buffer;



//p指向将要写入缓存区的第1个字符
//n 代表将要写入缓存区的字符数
//flushbuffer 把缓存区的内容写出,且会重置bufptr指针
void bufwrite(char *p, int n)
{
        while (--n >= 0){  //--n >= 0 等效于 n-- > 0
              if (bufptr == &buffer[N])  //条件等效于 bufptr > &buffer[N-1] 因为坚持“不对称边界”原则
                 flushbuffer();
              *bufptr++ = *p++;
           }
}   
//库函数,一次移动k个字符,通常用汇编语言实现来提高速度。下面是自己实现这个函数
void memcpy(char *dest, const char *source, int k)
{
    while( --k >= 0)
      *dest++ = *source++;
}

//bufwrite memcpy 版

void bufwrite(char *p, int n)
{
  while(n > 0){
    int k, rem;
    
    if (bufptr == &buffer[N])
          flushbuffer();
    
    rem = N - (bufptr - buffer);  //缓存区当前可用字符数,总字符-以占用字符。
    k = n > rem? rem: n;
    memcpy(bufptr, p, k);
    bufptr += k;
    p += k;
    n -= k;
   }
}
记住两个原则,特例外推法和仔细计算边界!

//代码皆出自《c陷进与缺陷》










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值