首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

stpncpy兑现疑问

2013-01-02 
stpncpy实现疑问//函数返回的是数组尾部吧,因dst++,这样返回有什么意义,而且感觉数组最后没有以\0结束,是

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之类的。

热点排行