strncpy_s

#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { int i=0; char ar1[10] = {-1}; for (;i<10;i++) { ar1[i]=-1; } const char * te="this is test strncpy_s"; strncpy_s(ar1,10,te,5); return 0; }  

 

以上是 示例代码 

strncpy_s 函数原型:

 

#if __STDC_WANT_SECURE_LIB__

_CRTIMP_ALTERNATIVE __checkReturn_wat errno_t __cdecl strncpy_s(__out_ecount_z(_DstSize) char * _Dst, __in rsize_t _DstSize, __in_z_opt const char * _Src, __in rsize_t _MaxCount);

char * _Dst:目标buffer

_DstSize:buffer长度

 

char * _Src:源buffer

_MaxCount:指定拷贝长度 注意:strncpy_s自动比较_MaxCount和 strlen(_Src) 然后取两者中的较小值

所以上述代码改做

int i=0; char ar1[6] = {-1}; for (;i<6;i++) { ar1[i]=-1; } const char * te="this ";//is test strncpy_s"; strncpy_s(ar1,te,10); return 0; 

也不会有错 因为实际执行的拷贝长度是 5

而且 拷贝结束后 strncpy_s 会自动在字符串结尾处 添加 /0

 

 

你可能感兴趣的:(VC++)