很多技术笔试都考字符串复制函数的编写(不能用那个库函数),
有人说说这个函数的考点在哪里和编写的时候要注意的问题吗?
最好能有编写严谨的例程。
函数声明:
char * strcpy(char * strDest, const char * strSrc)
目前为止,我总结出:
1,考察strDest和strSrc非空
2,考察strDest和strSrc是否重叠
3,注意书写结构
4,函数健壮性
另外,我觉得如果strSrc缓冲区的数据长度如果超过了strDest缓冲区
的长度,就会产生溢出,但怎么检查strDest缓冲区的长度?
有谁还有补充?
strncpy()函数: 这个程序是真正的牛人Linus Torvalds写的
char * strncpy(char * dest,const char *src,size_t count)
{
char *tmp = dest;
while (count-- && (*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
}
肯定会有人说:“不对呀,为什么不为目标字符串加上结束标志,变成这样:
while (count-- && (*dest++ = *src++) != '\0')
/* nothing */;
*dest = '\0'; ”
我说,作为strncpy函数,它只要把指定长度的字符copy给目标串就行了,而不需要自作多情,加上什么字符串结束标志,也许函数调用者根本就不想要这个结束标志,如果需要,他自己会加上的。
所以说,一个函数,只作自己该作的事,这就是简单性;而其他函数应该明白被调用函数可以作什么事,这就是一致性;Unix/Linux本身就是简单一致性原则的绝妙产品。