标准C++宝典里面的例子看不懂,哈哈(100分)

  • 主题发起人 主题发起人 Restart1
  • 开始时间 开始时间
R

Restart1

Unregistered / Unconfirmed
GUEST, unregistred user!
在76页,函数重载的例子,有一个拷贝函数,实现当源字符串结束或者已经拷贝了指定个数
的字符串后就会终止拷贝过程。
void string_copy(char * dest,const char * src,int len)
{
while (len &&(*dest ++ = *src++)!='/0')
--len;
while (len--)
* dest ++ = '/0';
}
这两个while怎么就实现了这个功能呢,--len和len--看糊涂了。
 
while (len &&(*dest ++ = *src++)!='/0')
--len;
這一句實現了,將src拷貝到dest。一個字符一個字符拷貝,拷貝完一個後指針下移到下一個字符,直到len個字符或src結束。如果len>src的長度,src的結束符號'/0'也拷貝到dest。程序結束。否則執行下一條語句
給dest加結束符號/0,所以
while (len--)
* dest ++ = '/0';就是給dest加結束符號/0。
如果還不懂,請再問。
 
这个其实就是标准c语句,没有c++的扩展,
while (len &&(*dest ++ = *src++)!='/0')
这个表达式中 先得到表达式(*dest ++ = *src++)的值,即源字符串的一个字符,
它与 len 这个整数(>=8位长度)作 与 运算,如果 len 或 src的任意字节 两者
中有一个变为 0 时,(字符'/0' 和 整数 0 在c语言中的 表示同一值),
循环就结束,即结果是 要么 已经拷贝了 len 个字符, 要么还没有拷贝完len
个长度,但源字符串已经结束,
接下来执行 while (len--)
* dest ++ = '/0';
即给目标字符串赋予余下长度个'/0'作为目标字符串的结束符
 
laline 对while里表达式解释不对。
第一个while测试两个条件,是否copy了len个字符,是否到达了scr的串尾。
第二个while加n- sizeof(scr)个'/n'
 
完全同意楼上的。
 
两个while 作用是总共拷len个字符,src不足len的用'/n'补足。
 
后退
顶部