:“20170813_c语言研究十五_李智宇1”讨论了C语言中封装和函数指针的应用 中提到的知识点: 1. **封装**:本研究中,作者将`main()`函数封装在一个自定义的库中,创建了一个类似于黑盒的结构。这样做的好处在于,对于不参与`cc`工具制作的人来说,他们无需了解`main.obj`文件的具体内容,只需关注自己的任务,即`m.c`文件的编写。这种封装提高了代码的模块化,增强了分工合作的效率,并且减少了潜在的干扰。 2. **函数指针**:与研究12相比,`f`被声明为一个指向函数指针的指针,而在研究12中,`f`是一个函数指针数组。作者尝试了两种不同的方式来初始化`f`,但初始的直接赋值方法导致了编译错误。通过一个函数指针数组`func`作为中介,成功地将函数指针赋值给了`f`。 3. **链接默认行为**:开发工具`cc`默认链接`main.obj`,这表明在C语言编程中,主函数`main()`被视为程序执行的入口点,而其他的函数可以通过`extern`关键字在不同的源文件中声明和定义。 【部分内容】中涉及的知识点: 1. **`scanf()`函数**:`scanf()`在读取字符串时可能会导致缓冲区溢出,这是由于它允许用户输入超出预定义数组长度的数据。为了避免这个问题,可以使用格式说明符`%ns`,这里的`n`表示最多读取的字符数。在这个例子中,`%4s`用于防止超过`name[5]`的大小,但需要注意,数组大小包括结束符`\0`,因此实际最大字符数应为4。另外,`scanf()`在遇到空格时会停止读取,而不会将其作为有效字符。 2. **`gets()`函数**:`gets()`函数在读取字符串时没有长度限制,这使得它非常危险,可能导致缓冲区溢出。因此,`gets()`不推荐在生产环境中使用。 3. **`fgets()`函数**:`fgets()`是一个更安全的替代`gets()`的函数,它可以接收一个最大长度参数,从而避免缓冲区溢出的问题。`fgets()`会读取包括空格在内的整个行,直到达到指定的最大长度或遇到文件结束符。 总结来说,这篇研究深入探讨了C语言中封装和函数指针的高级用法,以及在输入处理方面如何避免常见的安全问题。通过使用函数指针和封装技术,可以提高代码的可维护性和团队协作效率。同时,对`scanf()`、`gets()`和`fgets()`的理解,有助于编写更健壮、安全的C语言程序。
剩余17页未读,继续阅读
- 粉丝: 33
- 资源: 300
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0