strncpy_s与_TRUNCATE
测试代码
std::cout << " --------------------------------------------------------------- " << std::endl;char arr[10] = {0};std::cout << "strncpy_s ret = " << strncpy_s(arr, sizeof(arr), "1234512345", _TRUNCATE) << std::endl;//可以std::cout << "strncpy_s contains: " << arr << " , _countof(arr) = " << _countof(arr) << std::endl;std::cout << " --------------------------------------------------------------- " << std::endl;memset(arr, 0, _countof(arr));std::cout << "strncpy_s ret = " << strncpy_s(arr, sizeof(arr), "1234512345", _countof("1234512345")) << std::endl;//危险std::cout << "strncpy_s contains: " << arr << " , _countof(arr) = " << _countof(arr) << std::endl;
测试输出
---------------------------------------------------------------
strncpy_s ret = 80
strncpy_s contains: 123451234 , _countof(arr) = 10---------------------------------------------------------------
Invalid parameter passed to C runtime function.
strncpy_s ret = 34
strncpy_s contains: , _countof(arr) = 10
e,所谓的安全函数,参数不对还是会“崩”,如果设置的参数不对依然有风险