#qt ## 主要作用: strcpy_s() 是 C++ 中的一个安全版本的字符串拷贝函数,主要用于将源字符串(包括终止字符 '\0')复制到目标字符串中。这个函数属于 C11 和 C++11 标准库的一部分,并提供了一个额外的参数来指定目标缓冲区的大小,从而增加了安全性,避免了缓冲区溢出的问题。 ##  函数原型: ``` cpp errno_t strcpy_s(char* dest, rsize_t destsz, const char* src); ``` 参数 dest:指向目标字符数组的指针,该数组将存储从 src 拷贝的字符串。 destsz:目标字符数组的大小(以字节为单位)。这个参数允许 strcpy_s() 检查是否会发生缓冲区溢出。 src:要拷贝的源字符串。 返回值 如果函数成功执行,strcpy_s() 将返回 0。如果出现错误,例如目标缓冲区太小,它将返回一个非零的错误代码。 ## 示例代码 : ``` cpp #include #include int main() { char dest[50]; const char* src = "Hello, World!"; if (strcpy_s(dest, sizeof(dest), src) == 0) { std::cout << "字符串拷贝成功: " << dest << std::endl; } else { std::cout << "字符串拷贝失败" << std::endl; } return 0; } ``` ``` 在这个示例中,我们尝试将 src 字符串拷贝到 dest 数组中。我们使用 sizeof(dest) 来确保 destsz 参数是正确的,这样 strcpy_s() 就可以检查是否有足够的空间来存储源字符串,从而避免缓冲区溢出。 注意事项 确保目标缓冲区有足够的空间来存储源字符串,包括终止字符 '\0'。 strcpy_s() 在拷贝完成后会自动在目标字符串的末尾添加终止字符 '\0'。 与 strcpy() 不同,strcpy_s() 不会自动截断超出目标缓冲区大小的源字符串。如果源字符串(包括终止字符)的长度大于或等于目标缓冲区的大小,strcpy_s() 将返回一个错误。 在一些编译器和操作系统中,strcpy_s() 可能不可用。在这种情况下,你可以使用 strncpy() 函数作为替代方案,但请注意 strncpy() 不会自动添加终止字符,因此你可能需要手动添加。 实际意义: 在我的文章,C++ primer plus题目及解析的十二章中第12.1题就运用到了这个知识点, 主要要注意的是两个指针类型不可直接相互赋值,必须为其中一个申请空间,在使用strcpy_s()才能够安全的赋值。建议大家可以去翻看一下。 ```