首先声明:大家要是看官方解释看不懂,可以直接去看“自己的测试及理解”这里,简洁明了,函数这些东西,只要自己会用就行,其实不用深究。
strcpy和strncpy_s的微软官方说明
strcpy_s、wcscpy_s、_mbscpy_s、_mbscpy_s_l | Microsoft Learn详细了解:strcpy_s、wcscpy_s、_mbscpy_s、_mbscpy_s_lhttps://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/strcpy-s-wcscpy-s-mbscpy-s?view=msvc-170strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l | Microsoft Learn详细了解:strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l
https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170
关于rsize和strcpy_s
百度安全验证
https://zhidao.baidu.com/question/374512751879276204.html
C++中函数strcpy和strcpy_s - 一小白 - 博客园 (cnblogs.com)
https://www.cnblogs.com/htfeng/p/9931734.html
!!!
自己的测试及理解
请注意代码,为了防止大家运行出错,所以strcpy_s函数代码进行了注释,只运行了strncpy_s
#include<stdio.h> #include<string.h> int main(void) { char str1[20] = "hello"; char str2[20] = "abc"; //strcpy_s(str1, 4, str2); 按照我的测试理解意思,第二个参数,是拷贝后(函数运行后)str1现在的所占内存的字符串大小(sizeof),且该数字必须大于等于4并且不能超过20(因为定义的数组最大为20),即在4~20之间。 //所以一般第二个参数写成:strlen(str2)+1,即:strcpy_s(str1, strlen(str2)+1, str2); strncpy_s(str1, 3, str2, 2); //第二个参数3,跟上文分析一样,且必须大于等于3(因为还有'\0') printf("%s", str1); return 0; }
strcpy_s(str1, 4, str2); 按照我的测试理解意思,第二个参数,是拷贝后(函数运行后)str1现在的所占内存的字符串大小(sizeof),且该数字必须大于等于4并且不能超过20(因为定义的数组最大为20),即在4~20之间。
所以一般第二个参数写成:strlen(str2)+1,即:strcpy_s(str1, strlen(str2)+1, str2);
!!!