因为安全的问题将strcpy替换为strcpy_s使用,一直没注意strcpy_s这类函数对于剩余内存的处理。直到某次调试出了点问题,一看内存,剩余的内存全部被填充了FE。与之前的认知发生了冲突。于是查阅了资料,发现确实是这种情况。而且还不止这个一个函数会这样。
官方的解释:
strncat_s、_strncat_s_l、wcsncat_s、_wcsncat_s_l、_mbsncat_s、_mbsncat_s_l
这些函数的调试版本首先用 0xFD 填充缓冲区。
https://technet.microsoft.com/zh-cn/w6w3kbaf(zh-tw).aspx
若要禁用这种填充,则需要调用_CrtSetDebugFillThreshold(0)
CrtSetDebugFillThreshold说明链接
https://technet.microsoft.com/zh-cn/ms235389