vc6.0溢出不报错问题,如何解决?(语言-c++)

明明存在了缓冲区溢出,却能正常运行不报错,并且输出结果也是完整的

img

# include 
# include 
char name[] = "abcdefghijklmnopqrstuvwxyz";
int main() {
    char buffer[8];
    strcpy(buffer,name) ;
    return 0;
}

要想出现报错警告的话,请使用对应的安全函数:

strcpy_s(buffer,name);

如果是防止溢出,使用:

strncpy(buffer,name,sizeof(buffer)-1);
//或
strncpy_s(buffer,name,sizeof(buffer)-1)

注意,减1是预留给字符串的结尾符合 \0 ,不预留会有问题的(这是常识)。
如果对您有用,望采纳。

运气好,越界内存不上没有被使用

这个就是c的不安全处了。strcpy不做缓存大小检测,因此从buffer开始一直复制,这样会导致超出部分的值被修改