strcpy问题
我定义一个char str[32].然后到数据库读一个字符串,拷贝到str中去。strcpy(str,(LPCSTR)_bstr_t(m_pRecordset->GetCollect("Position")));其实Position长度大于32。这里的strcpy竟然没报错误,这是为什么?
[解决办法]
strcpy是不负责越界检查的,下面是strcpy的简单实现。
char *strcpy(char *des, char *sour)
{
char *tmp = des;
while(*sour)
{
*des = *sour;
des++;
sour++;
}
return tmp;
}
[解决办法]
strncpy也是不安全的,它处理结尾\0时有null,如果源串长度大于n,则strncpy不复制最后的'\0'结束符。而且也无法处理内存重叠的情况。请使用strncpy_s,它可以分别指定Src和Dest的长度,而且也可以如何追加NULL,如果出现可能溢出的情况都会抛出异常。