嵌入式笔试刷题(第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 内核、以及实用电路知识等内容。
查看2道真题和解析