stpncpy兑现疑问

stpncpy实现疑问
//函数返回的是数组尾部吧,因dst++,这样返回有什么意义,而且感觉数组最后没有以\0结束,是不是我理解错了stpncpy兑现疑问
char *
 stpncpy(char * __restrict dst, const char * __restrict src, size_t n)
 {
 
  for (; n--; dst++, src++) {
  if (!(*dst = *src)) {
  char *ret = dst;
  while (n--)
  *++dst = '\0';
  return (ret);
  }
  }
  return (dst);
 }

------解决方案--------------------
单步调试下就很容易知道了
好像是返回了尾

char *
 stpncpy(char * __restrict dst, const char * __restrict src, size_t n)
 {
  
     for (; n--; dst++, src++) {
         if (!(*dst = *src)) {//dst空间足够大的话,此条件成立
             char *ret = dst;
             while (n--)
                 *++dst = '\0';//dst加尾
             return (ret);
         }
     }
     return (dst);
 }

------解决方案--------------------
引用:
C/C++ code?1*++dst = '\0';//dst加尾
//这个只发生在src的长度小于n的情况下


是的,你可以按自己的想法改造这个函数啊
------解决方案--------------------
1.是返回尾部
2.在n大于sizeof(str)的时候确实不是以'\n'结束
------解决方案--------------------
肯定的啊,指定copy长度不就是为了这个
指定几个复制几个,不够拿0补齐。
返回值本来就没什么意义。使用这个函数不用看返回值。

这个函数应该废弃了,应该使用安全性加强版的strncpy_s之类的。