strncpy()
据说可以防止缓冲区溢出。但是,如果它防止了不带null终止的溢出,则很可能随后的字符串操作都会溢出。因此,为了防止这种情况,我发现自己正在做:
strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';
man strncpy
给出:
该
strncpy()
功能类似,但所复制的n
字节数不超过个字节src
。因此,如果存在第一间没有空字节n
的字节src
,则结果将不会被空终止。
在没有null终止的情况下,看起来像是无辜的事情如下:
printf( "FOO: %s\n", dest );
...可能会崩溃。
是否有更好,更安全的替代方法strncpy()
?
extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
'):strncpy()函数最多将n个字符从s2复制到s1。如果s2的长度少于n个字符,则s1的其余部分将以'\ 0'字符填充。否则,s1不会终止。