20170813_c语言研究十五_李智宇1
需积分: 0 3 浏览量
更新于2022-08-08
收藏 416KB DOCX 举报
:“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语言程序。
卡哥Carlos
- 粉丝: 33
- 资源: 300
最新资源
- 毕设和企业适用springboot智慧城市管理类及文化旅游信息平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及网络游戏交易平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及无人超市平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及信息管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及物联网监控平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及虚拟人类交互系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及业务流程自动化平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及智能教育平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及智能金融分析平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及智能图书馆管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市类及城市智能运营平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及智能客服系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及智能图像识别系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及资产管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市类及广告效果评估平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市类及机器人平台源码+论文+视频.zip