今天在写测试代码时,使用了gets函数来获取输入的字符串,结果出现了异常警告:
gets函数危险的地方在于:它不知道缓冲区有多大,它会一直读取数据放到缓冲区,直到出现换行符(’\n’)或者遇到EOF才会停止。这样很容易造成缓冲区的溢出。
使用fgets可以避免缓冲区异常的危险,但是却将换行符’\n’,也读入到字符串中,因此需要对fgets函数进行封装(wrapper)。
char buffer[BUFSIZ];
while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
...process line of data...
}
进行封装:
char *fgets_wrapper(char *buffer, size_t buflen, FILE *fp)
{
if (fgets(buffer, buflen, fp)