A,B,D都可以将字符串的结束符0复制,C中当*b为NULL时,for循环已经结束,里面的这条if(!(*a=*b)) break;根本就不会执行。D中由于for中的条件控制为空,所以它会执行if(!(*a++=*b++)) break;所以D也是正确的