明明存在了缓冲区溢出,却能正常运行不报错,并且输出结果也是完整的
# 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开始一直复制,这样会导致超出部分的值被修改