嵌入式笔试刷题(第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 仍为 NULLstrcpy 会崩溃;
  • 正确方式:

15. 找出下面代码的运行错误

char *GetMemory(void) {
    char p[] = "hello world";
    return p;
}

错误分析:

  • p 是局部数组,函数返回后内存释放;
  • 返回悬空指针

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式笔试专栏 文章被收录于专栏

本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。

全部评论
点赞 回复 分享
发布于 04-25 21:45 山西

相关推荐

代码飞升:办法总比困难多,提前背那个本子的数字,他如果不在旁边你就直接乱报数字,自信一点,当然这是没办法的办法
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务