none
vs2013中为什么不能用strcpy这样的标准库函数? RRS feed

  • 问题

  • vs2013中经常提示用strcpy_s这样加了_s的函数,但是为什么不能用strcpy呢?不能兼容吗?既然要用strcpy_s,那strcpy_s(name,"no name");能行(其中name是char []),而strcpy_s(hobby, "no");却不行(其中hobby是char *)?这是什么问题?
    
    
    
    2015年7月1日 7:35

答案

  • strcpy_s是strcpy的安全版本,strcpy无法告诉你的会不会因为复制的目标buffer太小导致缓冲区溢出,而strcpy_s虽然不会纠正这个错误但是会检测出来告诉你这个错误。请参考这篇文档: Security Features in the CRT

    https://msdn.microsoft.com/en-us/library/8ef0s5kh.aspx

    VS2013里还是能用的旧版本的,不过要用_CRT_SECURE_NO_WARNINGS 来消除这个错误信息。项目属性-》C++-》Preprocessor-》Preprocessor definitions里加上_CRT_SECURE_NO_WARNINGS;

    你可以在网络上搜索一下关于strcpy_s的一些blog,讲的挺详细的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已建议为答案 xa0082249956 2015年7月9日 5:27
    • 已标记为答案 Shu 2017 2015年8月10日 9:14
    2015年7月2日 5:45