问题的原因是在使用strncpy
或strncat
函数时,最后的目标字符数组没有被正确地终止,导致复制的字符比应该少一个。
解决方法是在目标字符数组的最后一个位置手动添加一个空字符\0
来终止字符串。
下面是一个示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
strncpy(dest, src, sizeof(dest) - 1); // 复制src到dest,目标字符数组大小减1
dest[sizeof(dest) - 1] = '\0'; // 手动添加空字符终止字符串
printf("Copied string: %s\n", dest);
return 0;
}
在上面的示例中,我们使用strncpy
函数将src
复制到dest
,并且将目标字符数组的大小减1,确保最后一个位置保留给空字符。然后,我们手动在目标字符数组的最后一个位置添加一个空字符\0
来终止字符串。
同样的方法也适用于strncat
函数。确保目标字符数组有足够的空间来容纳源字符串和额外的空字符,并手动在合适的位置终止字符串。
这样,就可以确保复制的字符数与预期一致,并且字符串正确地终止。