嵌入式笔试刷题(第30天)
11. 写一个“标准”宏 MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
说明:
- 使用括号包裹参数,防止副作用;
- 用三目运算符实现最小值比较。
12. 写出 float x 与“零值”比较的 if 语句
if (fabs(x) < 1e-6) { // x 可以认为是 0 }
说明:直接使用 x == 0.0
对浮点数不安全,建议使用误差范围比较。
13. 找出下面代码的运行错误
void test1() { char string[10]; char *str1 = "0123456789"; strcpy(string, str1); }
错误分析:
str1
是 10 字节(不含 '\0'),但string
只开了 10 字节;strcpy
会拷贝 '\0',需要 11 字节;- 应该改为
char string[11];
或strncpy
限制长度。
14. 找出下面代码的运行错误
void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); }
错误分析:
p
是传值,不会改变str
的值;str
仍为NULL
,strcpy
会崩溃;- 正确方式:
15. 找出下面代码的运行错误
char *GetMemory(void) { char p[] = "hello world"; return p; }
错误分析:
p
是局部数组,函数返回后内存释放;- 返回悬空指针
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。