c字符串拷贝与strncpy

Sam*_*hen 2 c string

我对strncpy功能感到非常沮丧.我做了这样的事情:

char *md5S; //which has been assign with values, its length is 44
char final[32];
strncpy(final,md5S,32);
Run Code Online (Sandbox Code Playgroud)

但不知何故,长度char final[]超过32后.
我该怎么办?

rou*_*ier 9

你忘了为空角色留出空间

char final[33];
strncpy(final,md5S,32);
final[32] = '\0';
Run Code Online (Sandbox Code Playgroud)


Jer*_*man 5

strncpy如果源字符串长度或长于n字符,则不会终止复制的字符串.如果您有权访问它,您可以使用strlcpy,NUL将为您终止.

改为:

strncpy(dst, src, dstlen - 1);
dst[dstlen - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

要么

strlcpy(dst, src, dstlen);
Run Code Online (Sandbox Code Playgroud)

其中,对于char数组,dstlen = sizeof(dst).