strncpy
的用法:它与strcpy
的不同之处就在于复制n
个字符,而不是把所有字符拷贝(包括结尾'\0'
)。
函数原型:char * strncpy(char *dst,const char * src, int n)
当src
的长度小于n
时,dst
内的未复制空间用'\0'
填充。否则,复制n
个字符到dst
,没有加'\0'
。这里就要注意在字符串dst
结尾处理加'\0'
的情况了
strcpy
,strncpy
,strlcpy
的用法好多人已经知道利用strncpy
替代strcpy
来防止缓冲区越界。但是如果还要考虑运行效率的话,也许strlcpy
是一个更好的方式。
strcpy
我们知道,strcpy
是依据 \0
作为结束判断的,会自动在缓冲区的string
后加\0
,如果 to
的空间不够,则会引起 buffer overflow
。strcpy
常规的实现代码如下(来自 OpenBSD 3.9
):