缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上。
可能造成缓冲区溢出的函数:
gets()对传输字符的个数没有限制,所以它可能会溢出自己的传输缓冲区。类似的函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),strcpy()
例如下面程序:
void foo(char*str){ charbuffer[16]; strcpy(buffer,str); }
上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。
替换函数:fgets()替换gets(),strncat()替换strcat(),snprintf()替换sprintf(),vsnprintf()替换vsprintf(),strncpy()替换strcpy()。