stpncpy兑现疑问
stpncpy实现疑问
//函数返回的是数组尾部吧,因dst++,这样返回有什么意义,而且感觉数组最后没有以\0结束,是不是我理解错了
------解决方案--------------------
单步调试下就很容易知道了
好像是返回了尾
------解决方案--------------------
是的,你可以按自己的想法改造这个函数啊
------解决方案--------------------
1.是返回尾部
2.在n大于sizeof(str)的时候确实不是以'\n'结束
------解决方案--------------------
肯定的啊,指定copy长度不就是为了这个
指定几个复制几个,不够拿0补齐。
返回值本来就没什么意义。使用这个函数不用看返回值。
这个函数应该废弃了,应该使用安全性加强版的strncpy_s之类的。
//函数返回的是数组尾部吧,因dst++,这样返回有什么意义,而且感觉数组最后没有以\0结束,是不是我理解错了
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);
}
------解决方案--------------------
是的,你可以按自己的想法改造这个函数啊
------解决方案--------------------
1.是返回尾部
2.在n大于sizeof(str)的时候确实不是以'\n'结束
------解决方案--------------------
肯定的啊,指定copy长度不就是为了这个
指定几个复制几个,不够拿0补齐。
返回值本来就没什么意义。使用这个函数不用看返回值。
这个函数应该废弃了,应该使用安全性加强版的strncpy_s之类的。