嵌入式笔试刷题(第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 山西

相关推荐

不愿透露姓名的神秘牛友
07-08 14:08
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务