当前位置: 首页 > news >正文

C/C++ 与嵌入式岗位常见笔试题详解

C/C++ 与嵌入式岗位常见笔试题详解

在嵌入式岗位的笔试题中,C 和 C++ 的基础考察非常常见,题目往往不复杂,但容易因为细节忽略而出错。下面我们结合几道经典的笔试题,整理成详细教程,帮助大家理清考点和易错点。


字符串拷贝的陷阱

题目背景

定义了一个函数 test,在函数中有一个字符数组 string,需要将传入的字符串拷贝到该数组中:

void test(char *str1) {char string[10];if (strlen(str1) <= 10) {strcpy(string, str1);}printf("%s\n", string);
}

问题分析

  1. strlen 计算规则

    • strlen 计算的是字符串中有效字符的个数,不包含结尾的 \0
    • 例如字符串 "0123456789",长度为 10,但实际存储时需要 11 个字节(包括结尾 \0)。
  2. 潜在问题

    • 数组 string 只有 10 个字节,如果传入字符串 "0123456789",拷贝时会多出 1 个字节导致越界写入
    • 拷贝后的 string 数组中没有正确的 \0 终止符,打印时会继续读取内存,可能输出乱码甚至引发安全漏洞。
  3. 正确修改

    • 判断条件应改为:
    if (strlen(str1) < sizeof(string)) {strcpy(string, str1);
    }
    
    • 这样保证字符串和结尾 \0 一共不会超过 10 个字节。

小结

这道题考察的是 字符串长度与存储空间的区别,以及 strlenstrcpy 的正确使用。


sizeof 运算符与数组/指针

题目背景

在 64 位系统下,int 占 4 字节,有如下代码:

int arr[10] = {0,1,2,3,4,5,6,7,8,9};
int *pt = arr;printf("%ld\n", sizeof(arr));
printf("%ld\n", sizeof(pt));

问题分析

  1. sizeof 不是函数,而是运算符,返回的是编译期确定的类型所占的字节数。

  2. 数组与指针的区别

    • sizeof(arr) → 整个数组大小 = 10 * sizeof(int) = 40
    • sizeof(pt) → 指针大小,在 64 位系统下是 8 字节

特殊情况:函数参数中的数组

void func(int arr[]) {printf("%ld\n", sizeof(arr));
}
  • 虽然写作 arr[],但在函数参数中它退化为指针,因此 sizeof(arr) 得到的是 指针大小,即 8,而不是数组大小。

小结

考察点在于 数组名和指针在某些情况下可以互换,但 sizeof 可以区分两者


文件大小的获取

题目背景

编写 C 代码获取一个文件的大小。

思路

  1. 使用 fopen 打开文件
  2. 使用 fseek(fp, 0, SEEK_END) 将文件指针定位到末尾
  3. 使用 ftell(fp) 获取当前位置(字节数)
  4. 使用 fclose 关闭文件

示例代码

#include <stdio.h>
#include <stdlib.h>int main() {FILE *fp = fopen("test.mp4", "rb");  // 只读方式打开文件if (fp == NULL) {perror("文件打开失败");return 1;}fseek(fp, 0, SEEK_END);  // 定位到文件末尾long size = ftell(fp);   // 获取当前位置(字节数)fclose(fp);              // 关闭文件printf("文件大小为: %ld 字节\n", size);return 0;
}

小结

本题考察 文件操作函数的基本功,尤其是 fseekftell 的配合使用。


幂函数中的未初始化变量

题目背景

代码如下:

int main() {int x = 10, y = 3, z;printf("%d\n", z);return 0;
}

问题分析

  • z 没有初始化,直接使用它会产生 未定义行为
  • 在不同编译器或不同运行环境下,可能输出随机数、0、垃圾值。

正确写法

int z = 0; // 或者赋值为其他确定值

小结

本题考察的是 变量初始化的重要性,尤其在嵌入式开发中,未初始化变量可能引发严重 bug。


总结

通过以上几道笔试题,我们可以提炼出几个高频考点:

  1. 字符串处理strlen 不包含 \0,拷贝字符串时必须考虑数组空间是否足够。
  2. 数组与指针sizeof 在数组与指针上的行为不同,函数参数中的数组会退化为指针。
  3. 文件操作:掌握 fopenfseekftellfclose 等函数的基本使用。
  4. 变量初始化:未初始化的变量会导致未定义行为,必须养成良好的初始化习惯。

这些题目虽然不复杂,但往往是嵌入式岗位笔试中最容易“失分”的地方。

http://www.dtcms.com/a/340877.html

相关文章:

  • MYSQL为什么会发生死锁,怎么解决
  • 第三阶段数据-3:数据库脚本生成,备份与还原,分离与附加
  • configtx通道配置文件
  • RHCA08内存管理
  • 对称加密算法
  • 数据库DML语言(增、删、改)
  • 闪电赋能全链路:领码SPARK一体化创新平台
  • 基于HTTP3的WebTransport实践
  • 基于 Java 和 MySQL 的精品课程网站
  • 在完全没有无线网络(Wi-Fi)和移动网络(蜂窝数据)的环境下,使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本2)
  • Ubuntu 重连usb设备(断电和不断电方案)亲测可行
  • 亚马逊新品爆单策略:从传统困境到智能突破
  • LeetCode热题100--101. 对称二叉树--简单
  • C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题
  • 《数据之舞》
  • GitHub宕机生存指南:从应急协作到高可用架构设计
  • QT-图像灰度处理时QImage.setPixel方法存在的坑
  • 在QT中动态生成控件造成界面卡顿时的鼠标处理
  • Qt设置软件使用期限【新版防修改系统时间】
  • 一个 WPF 文档和工具窗口布局容器
  • GitHub宕机应急指南:无缝协作方案
  • Eclipse 里Mybatis的xml的头部报错
  • 软考高级--系统架构设计师--案例分析真题解析
  • Java项目基本流程(五)
  • DeepSeek API 申请与 Node.js 对接指南
  • 服务器硬件电路设计之 SPI 问答(一):解密 SPI—— 从定义到核心特性
  • 服务器硬件电路设计之 SPI 问答(三):SPI 信号完整性守护与时钟频率的硬件设计羁绊
  • PCL+Spigot服务器+python进行MC编程2(使用RCON)---可以生成角色
  • 图论Day6学习心得
  • 源码编译部署 LAMP 架构详细步骤说明