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());

啊。

相关链接

欢迎反馈与建议,请联系电邮
2024 © 视觉网