华为C语言笔试题解析与常见错误
需积分: 3 10 浏览量
更新于2024-10-25
收藏 31KB DOC 举报
"这篇资料包含了2007年华为公司针对C语言的笔试题目及解答,旨在帮助面试者准备华为的面试。"
华为C语言笔试题目的解析:
1. 查找错误:
在`test1()` 函数中,错误在于没有正确地为字符串分配足够的空间。`string` 被定义为长度为10的字符数组,但尝试存储一个长度为10的字符串(包括结束符`\0`),会导致丢失字符串的结束符。正确的做法是定义`string`为长度为11的数组:`char string[11];`
在`test2()` 函数中,`strcpy()` 使用不当。`str1` 没有被赋予字符串结束符`\0`,这会导致`strcpy()`在内存中盲目地复制,可能会引起越界访问。解决方法是在循环结束后添加`str1[9]='\0';`
`test3()` 函数中,`strcpy()` 的使用同样存在问题。`strlen(str1)` 不计算结束符,因此当`str1`恰好有10个字符时,`string`不会得到结束符。应将条件更改为`strlen(str1)<10`来确保空间足够。
2. 查找错误:
宏定义`MAX_SRM256DSNget_SRM_no()` 中,`SRM_no` 没有被初始化。由于使用了`static`关键字,其值会在每次调用函数时保留,导致函数变为非重入的,结果不可预测。要修复此问题,应移除`static`声明,使得`SRM_no`在每次调用时都重新初始化。
3. 编程题:
函数`sum(int a)` 包含两个局部变量,`c`是自动变量,每次调用都会初始化为0;`b`是静态变量,其值在函数调用之间保持。在`main()`函数中,`for`循环5次调用`sum()`,`b`的值会累加2,`c`的值会增加5。所以,对于`a`=2的情况,`sum()`在第一次调用时返回`2 + 3 + 1 = 6`,第二次调用返回`2 + 5 + 2 = 9`,以此类推,直到第五次调用,返回`2 + 9 + 5 = 16`。
通过这些题目,我们可以了解到C语言中字符串处理、内存管理、变量作用域以及函数调用的基本规则。同时,它强调了对程序安全性和可维护性的关注,这对于任何编程面试都是非常重要的。
2010-04-06 上传
2011-08-08 上传
2013-03-08 上传
2011-04-01 上传
2012-10-11 上传
2012-02-14 上传
能能
- 粉丝: 6
- 资源: 48
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全