strcpy
和 strncpy
是 C 标准库中的两个用于字符串复制的函数。它们的原型分别在 string.h
头文件中定义。
strcpy
函数用于将源字符串复制到目标字符串中。
char *strcpy(char *dest, const char *src);
dest
:目标字符串数组的指针。确保目标数组有足够的空间来容纳源字符串。src
:源字符串数组的指针。
该函数返回目标字符串的指针。but不检查目标缓冲区的大小,这可能导致缓冲区溢出。如果源字符串的长度超过了目标缓冲区的大小,就会导致内存被错误地覆盖,进而引发严重的安全问题,如应用程序崩溃、数据破坏,甚至被恶意代码利用。
strncpy
函数可以指定要复制的最大字符数,从而提供了一定程度的缓冲区保护。然而,仍需要小心处理,因为如果源字符串的长度小于指定的长度,目标字符串可能未被正确终止。
char *strncpy(char *dest, const char *src, size_t n);
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[20]; // 确保目标数组大小足够容纳源字符串
// 复制最多 15 个字符
strncpy(dest, src, 15);
// 确保手动添加空字符,以确保目标字符串以 \0 结尾
dest[19] = '\0';
printf("Source: %s\n", src);
printf("Destination: %s\n", dest);
return 0;
}
或者使用C++ std::string.