嵌入式面试八股文

一、C/C++题目

1.1.strcat、strncat、strcmp、strcpy,那些会导致内存溢出?如何改进?

  1. strcmp:与内存溢出没有关系,其功能为比较两个字符串是否相等。
  2. strcpy:把源字符串拷贝到目的内存中,如果源字符串过长,目标内存可能不够用,造成内存溢出。使用strcpy_s(char *dest, int size, const char *src)指定目的内存的大小进行改进
  3. strcat:把一个字符串接到另一个字符串的后面,如果目的内存不足,容易照成越界。strncat()虽然可以指定连接的字符个数,但是函数在内部使用内存时,也没有做内存越界的判断。

1.2.动态内存分配

  • malloc()free()是C/C++的库函数,返回值为空指针,需要进行强制类型转换,并且指定需要分配的内存大小
  • newdelete是C++关键字,返回值是对象类型的指针,无需指定内存块的大小编译器可以自动分配内存。

malloc:

#include <iostream>
using namespace std;int main()
{int *p1 = (int *)malloc(sizeof(int)); // 分配一个int内存空间free(p1);p1 = NULL;return 0;
}

new:

#include <iostream>
using namespace std;int main()
{int *p1 = new int;     // 分配一个int内存空间int *p2 = new int[20]; // 创建一个整型数组,分配20个int空间int *p3 = new int(10);  // 赋初值,*p3 = 10delete p1;   // 释放p1delete[] p2; // 释放p2p1 = NULL;p2 = NULL;return 0;
}

1.3.static的用法

  1. 修饰局部变量:使其变为静态存储方式(静态数据区),局部变量在自定义函数执行完成之后不会被释放,而是继续保留在内存中,相当于全局变量。
  2. 修饰全局变量:使其只在本文件中有效,而在其他文件中不可用被调用,提高程序的健壮性。
  3. 修饰函数:使其只在本文件中有效,而在其他文件中不可用被调用,提高程序的健壮性。

1.4.const的用法:

  1. 修饰常量:定义时就进行初始化,之后不能被修改
  2. 修饰形参:func(const int a);该形参在函数里不能被改变
  3. 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

1.5.volatile作用和用法:

volatile:adj. 易变的

主要作用:防止编译的时候被优化。

  1. 编译器在很多时候为了提升程序的运行效率,会删除一些没用的代码,直接从寄存器或缓存中读取变量的值。因为从寄存器或者缓存中取值速度要比内存快。如果这个变量是共享数据,或者有可能被中断等程序修改,此时读到的数据可能跟内存中的数据就有可能不一致,接下来就会导致一系列的问题。
  2. 在变量的前面加上volatile关键字,告诉编译器这个变量是不稳定的,不管编译器怎么优化,每次都从内存中读数据
  3. 常用于操作硬件或多线程中被几个任务共享的变量

1.6 const常量与#define的区别

  1. const定义常量,在编译时会进行类型检查,存放在内存的静态区域,在程序运行过程中const常量只有一个拷贝
  2. #define定义的常量没有数据类型的检查,用一个字符串代替数字。#define所定义的宏变量在预处理阶段的时候进行替换,在程序中使用到该常量的地方进行拷贝替换。所消耗的内存比const变量多。

1.7 sizeof和strlen

  1. sizeof:计算字符串或数组,在内存中的字节数,计算结果包含\0
  2. strlen:只对字符串有效,计算字符串的长度,计数结果不包括\0
#include <iostream>
#include <string.h>
using namespace std;int main()
{int a[] = {1, 2, 3};char str1[] = "hello";cout << sizeof(a) << endl;    // 数组在内存中的字节数12cout << sizeof(str1) << endl; // 字符串在内存中的字节数:6,包含 \0cout << strlen(str1) << endl; // 字符串长度 5return 0;
}

1.8 结构体字节对齐

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes基于helm部署gitlab

kubernetes基于helm部署gitlab 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab。 先决条件 已运行的 Kubernetes 集群负载均衡器&#xff0c;为ingress-nginx控制器提供EXTERNAL-IP&#xff0c;本示例使用metallb默认存储类&#xff0c;为gitlab pods提供持久化存储&…

将word每页页眉单独设置

在进行论文排版的时候&#xff0c;总是会出现页眉的页码设置问题&#xff0c;比如出现奇数或偶数页码一致&#xff0c;尝试将前面页码改掉&#xff0c;后面再修改前面也进行了变动&#xff0c;将每页页眉单独设置&#xff1a; &#xff08;1&#xff09;在第一页的最后一行输入…

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…

智能指针shared_ptr:自定义删除器

重点&#xff1a; 1.普通指针转化成智能指针。 2.智能指针创建的时候&#xff0c;第二个参数是自定义删除器&#xff0c;默认情况下&#xff0c;shared_ptr调用delete()函数。 class A { public:void Get() { cout << b << endl; }; private:int b{ 10 }; };clas…

Pandas

系列文章目录 第一章 python数据挖掘基础环境安装和使用 第二章 Matplotlib 第三章 Numpy 文章目录 系列文章目录一、介绍1.1 为什么用Pandas&#xff1f;1.2 核心数据结构1.3 DataFrame1.3.1 结构1.3.2 常用属性1.3.3 常用方法1.3.4 DataFrame索引的设置修改行列索引值重设索…

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…

utf8mb4_general_ci 和utf8mb4_unicode_ci有什么异同,有什么优劣

utf8mb4_general_ci 和 utf8mb4_unicode_ci 都是 MySQL 数据库中的字符集和排序规则&#xff08;collation&#xff09;。它们主要用于指定字符数据的排序和比较规则&#xff0c;以确保在数据库中对字符串进行查询和比较时得到正确的结果。 异同点&#xff1a; 1. utf8mb4_gen…

Redis ERR Protocol error: invalid multibulk length

异常信息 org.springframework.data.redis.RedisConnectionFailureException: ERR Protocol error: invalid multibulk length; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: ERR Protocol error: invalid multibulk lengthCaused by: red…

《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

1. 简介 俗话说&#xff1a;磨刀不误砍柴工&#xff0c;因此在我们要开始写自动化脚本之前&#xff0c;我们先来学习和了解几个基本概念&#xff0c;在完全掌握了这几个概念之后&#xff0c;有助于我们快速上手&#xff0c;如何去编写自动化测试脚本。 元素&#xff0c;在这个…

vue-制作自动滚动效果

第一步&#xff1a;下载 可以查看官方地址chenxuan0000 npm i vue-seamless-scroll -save 第二步&#xff1a;引用 import vueSeamlessScroll from "vue-seamless-scroll";//注册components: {vueSeamlessScroll,}, 第三步&#xff1a;使用 <vue-seamless…

MongoDB面试题

1. NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用 NoSQL 数据库?说一说 NoSQL 数据库的几个优点? NoSQL 是非关系型数据库&#xff0c;NoSQL Not Only SQL。 关系型数据库采用的结构化的数据&#xff0c;NoSQL 采用的是键值对的方式存储数…

常用数据处理方式

文章目录 一、不同格式数据读取及转换split data into X and y二、数据预处理1、去重2、删除某一列3、删除两行4、date转字符串5、修改类型6、修改日期类型7、修改字段名8、加年月9、 删除字段10、 查看数据中顶部10%的数据11、设置索引12、判断空值13、排序14、 模糊查询15、修…

linux部署springboot项目中文乱码

问题描述&#xff1a; 将springboot项目打成jar包部署到linux服务器发现中文乱码 解决办法&#xff1a; java -Dfile.encodingutf-8 -jar xxxxx.jar转载至&#xff1a;https://blog.csdn.net/qq_39706515/article/details/119807632

Java---使用lombok简化实体类的编写----不要再写getter+sertter方法了

目录 使用lombok简化实体类的编写 首先&#xff1a; 加入lombok依赖&#xff1a; 然后 加上一个注解&#xff1a;Data 使用lombok简化实体类的编写 首先&#xff1a; 加入lombok依赖&#xff1a; <dependency><groupId>org.projectlombok</groupId>…

【问题随记】

ubuntu 14.04源更新(sources.list) deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-update…

clickhouse查询缓存

为了实现最佳性能&#xff0c;数据库需要优化其内部数据存储和处理管道的每一步。但是数据库执行的最好的工作是根本没有完成的工作&#xff01;缓存是一种特别流行的技术&#xff0c;它通过存储早期计算的结果或远程数据来避免不必要的工作&#xff0c;而访问这些数据的成本往…

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…

Protobuf

Protobuf&#xff08;Googles Protocol Buffers&#xff09;是一种灵活、高效、自动化的二进制序列化格式&#xff0c;它可以用于数据存储、通信协议等场景。相比其他序列化格式&#xff08;如JSON、XML等&#xff09;&#xff0c;Protobuf在序列化和反序列化速度和数据大小方面…

解决 MySQL 删除数据后,ID 自增不连续问题

修复前 除了部分数据&#xff0c;导致后续新增的数据&#xff0c;ID 自增不连续 解决方案 执行下方 SQL 语句即可修复此问题&#xff0c;mbs_order为需要修复的表名 SET i0; UPDATE mbs_order SET id(i:i1); ALTER TABLE mbs_order AUTO_INCREMENT0;

进程与线程、线程创建、线程周期、多线程安全和线程池(ThreadPoolExecutor)

目录 进程与线程线程和进程的区别是什么&#xff1f;线程分两种&#xff1a;用户线程和守护线程线程创建四种方式run()和start()方法区别&#xff1a;为什么调用 start() 方法时会执行 run() 方法&#xff0c;为什么不能直接调用 run() 方法&#xff1f;Runnable接口和Callable…