C++ 使用strcpy_s函数将字符串复制到字符数组
更新日期:2024.05.03
#include <iostream>
#include <string>
int main()
{
char name1[20] = "吃了没?世界";
std::string name2 = "吃了" ;
strcpy_s(name1, name2.size()+1, name2.c_str());//这个改成name2.c_str(),name2是string类型,不是char*
std::cout << name1 << std::endl;
std::cin.get();
return 0;
}
扩展资料:
strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
strcpy_s 一般使用三个参数
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
strcpy_s有两个重载版本
strcpy_s<dest size>(dest,src);
dest size必须是编译期常量 且必须是sizeof(dest);
第二个版本是目的长度执行期才知道
strcpy_s(dest, sizeof(dest),src);
之所以加后缀 _s 是因为防止拷贝时缓冲区溢出,所以程序员务必告诉 C runtime 目的地址确切的长度。
#include <iostream>
#include <string>
int main()
{
char name1[20] = "吃了没?世界";
std::string name2 = "吃了" ;
strcpy_s(name1, name2.size()+1, name2.c_str());//这个改成name2.c_str(),name2是string类型,不是char*
std::cout << name1 << std::endl;
std::cin.get();
return 0;
}
要不要把
strcpy_s(name1,name2.size()+1,name2);
写成
strcpy_s(name1,name2.size()+1,name2.c_str());
啊。