近期嵌软线下笔试题记录
1、以下代码的输出结果是?
#include <stdio.h>
#include <string.h>int main()
{int a,b,c,d;a = 10;b = a++; //a先赋值给b,然后自增1c = ++a; //a自增1后赋值给cd = 10*a++; //先进行运算然后a自增1printf("b,c,d:%d,%d,%d\n",b,c,d);//10 12 120printf("a:%d\n",a);//13system("pause");
}
b,c,d:10,12,120
a:13主要考察知识:前置++,后置++,运算符优先级
2、以下代码有什么问题?
#include <stdio.h>
#include <string.h>int main()
{char a;char *str = &a;strcpy(str,"hello");printf(str);system("pause");
}
导致内存访问错误,因为
char变量无法容纳整个字符串 "hello",可用数组实现拷贝。
3、请写出以下代码的输出内容:
#include <stdio.h>
#include <string.h>int main()
{char *c[] = {"ENTER","NEW","POINT","FIRST"};char **cp[] = {c+3,c+2,c+1,c};char ***cpp = cp;printf("%s\n",**++cpp);printf("%s\n",*__*++cpp+3);printf("%s\n",*cpp[-2]+3);printf("%s\n",*cpp[-1][-1]+1);system("pause");
}
这道题个人觉得有问题,只知道第一个输出为POINT,笔试的时候也是想了很久,回来后也用vs和ubuntu手敲的一遍,都编译错误。不知有无大佬知道这道题什么意思?
考察知识点:指针数组,二级指针,三级指针
4、指出下面代码里存在的所有问题,修正后输出结果是?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* fun1(char* x){char y = 0;y = *x+1+*(x+2);return &y;
}
char* fun2(){static char a[8] = {0};strcpy(a,"a+b=");return a;}int main()
{char a[5] = {1,3,5,7,9};char *b = NULL,*str1,*str2;b = fun1(a);str1 = fun2();strcpy(str2,"hello word,");printf("%s%s%d",str2,str1,*b);system("pause");
}
存在的问题
fun1函数返回一个指向局部变量的指针。在fun1中,声明了一个字符变量y,并尝试返回它的地址。但是,一旦fun1函数执行完毕,y将会被销毁,因此返回的指针将指向无效的内存位置。你应该避免返回指向局部变量的指针。
str2是一个指针,但没有分配内存给它。在main函数中,你声明了str2但没有分配内存,然后尝试使用strcpy复制字符串到str2,这会导致未定义的行为。你应该分配足够的内存给str2,或者使用字符数组来存储字符串。
修改后的代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* fun1(char* x){static char y = 0;//用static来延长变量的生命周期y = *x+1+*(x+2);return &y;
}
char* fun2(){static char a[8] = {0};strcpy(a,"a+b=");return a;}int main()
{char a[5] = {1,3,5,7,9};char *b = NULL,*str1,*str2;//char *str1 = NULL;//char *str2 = NULL;b = fun1(a);str1 = fun2();str2 = malloc(12*sizeof(char));//为str2o动态分配内存strcpy(str2,"hello word,");printf("%s%s%d",str2,str1,*b);free(str2);system("pause");
}
总结起来,
str1不需要额外的内存分配,因为它返回的是指向静态数组的指针,而静态数组在整个程序的生命周期内都存在。而str2需要内存分配,因为你希望将字符串复制到一个动态分配的内存块中,这需要通过malloc或类似的函数来显式地分配内存。还有指针定义的时候要初始化,虽然上面代码str1和str2没有初始化也可以正常运行,但是还是希望大家进行初始化,否则可能出现野指针的情况。
5、实现memcpy函数,函数功能是将源地址内容拷贝到目的地址,并返回目的地址。
void *memcpy(void *dest,void *src,size_t n);
void *memcpy(void *dest,void *src,size_t n)
{char *d =(char *)dest;const char* s =(const char *)src;for(size_t i=0;i<n;i++){d[i] = s[i];//逐个字节进行拷贝}return dest;
}
6、实现memmove函数,与memcpy的区别是需要保证源地址目的地址存在重叠时仍然能够得到预期效果
void* memmove(void* dest,const void *src,size_t n);
void* my_memcpy(void* dest, const void* src, size_t n) {if (dest == NULL || src == NULL) {return NULL; // 处理空指针情况}unsigned char* d = (unsigned char*)dest;const unsigned char* s = (const unsigned char*)src;// 如果源地址和目标地址有重叠,从后往前拷贝if (d > s && d < s + n) {d += n - 1;s += n - 1;for (size_t i = 0; i < n; i++) {d[i] = s[i];}} else {for (size_t i = 0; i < n; i++) {d[i] = s[i];}}return dest;
}
7、实现一个函数,该函数的功能是判断当前机器是大端字节序还是小端字节序
int check_endianness() {unsigned int num = 1;unsigned char *ptr = (unsigned char *)#if (*ptr == 1) {return 1; // 小端字节序} else {return 0; // 大端字节序}
}
8、内存溢出一般是什么原因导致的?段错误是什么原因导致?
内存溢出是指程序试图分配的内存超过了系统或应用程序能够提供的可用内存。这可能导致程序崩溃、异常终止或不稳定的行为。内存溢出通常出现在以下几种情况:
动态内存分配不足 数据结构过大 资源泄漏
段错误(Segmentation Fault,通常缩写为 SegFault)是一种操作系统产生的错误信号,指示程序访问了其内存范围之外的区域。通常是由以下几种情况引起的:
访问无效指针 栈溢出 访问受保护的内存区域
9、全局变量和局部变量在内存分配的区别?
总之,全局变量在整个程序生命周期内存在,分配在静态数据区或全局数据区,而局部变量在函数调用期间存在,分配在栈内存中。选择何时使用全局变量或局部变量需要根据变量的作用范围、生命周期和内存管理等因素进行权衡。
10、gcc的编译过程
预处理-----编译-----汇编------链接
11、什么是互斥锁?什么是信号量?产生死锁的原因?
互斥锁(Mutex) 是一种同步机制,用于控制多个线程对共享资源的访问。它确保在任何给定时刻只有一个线程可以访问被保护的共享资源,从而防止多个线程同时修改同一数据而导致的竞态条件。
互斥锁的基本操作是两个:上锁(Lock) 和 解锁(Unlock)。当一个线程尝试上锁时,如果锁没有被其他线程占用,那么它可以获取锁并访问资源,否则它会被阻塞,直到锁被释放。解锁操作会释放锁,允许其他等待的线程获得锁。
信号量(Semaphore) 也是一种用于多线程同步的机制,但它可以管理多个线程对资源的访问。信号量维护一个计数器,表示可用资源的数量。当线程想要使用资源时,它会尝试获取信号量,如果计数器大于零,线程就可以继续执行,同时计数器减少;如果计数器为零,线程会被阻塞,直到有其他线程释放资源并增加计数器。
死锁 是一种多线程同步问题,指的是多个线程相互等待彼此持有的资源,导致所有线程都无法继续执行。
相关文章:
近期嵌软线下笔试题记录
1、以下代码的输出结果是? #include <stdio.h> #include <string.h>int main() {int a,b,c,d;a 10;b a; //a先赋值给b,然后自增1c a; //a自增1后赋值给cd 10*a; //先进行运算然后a自增1printf("b,c,d:%d…...
基于MYSQL的主从同步和读写分离
目录 一.完成MySQL主从同步(一主两从) 1.主库配置 2.建立同步账号 3.锁表设置只读 4.备份数据库数据 5.主库备份数据上传到从库 6.从库上还原备份 7.解锁 8.从库上设定主从同步 9.启动从库同步开关 10.检查状态 二.基于MySQL一主两从配置&…...
java八股文面试[多线程]——合适的线程数是多少
知识来源: 【并发与线程】 合适的线程数量是多少?CPU 核心数和线程数的关系?_哔哩哔哩_bilibili 【2023年面试】程序开多少线程合适_哔哩哔哩_bilibili...
Linux系统下vim常用命令
一、基础命令: v:可视模式 i:插入模式 esc:命令模式下 :q :退出 :wq :保存并退出 ZZ:保存并退出 :q! :不保存并强制退出二、在Esc下: dd : 删除当前行 yy:复制当前行 p:复制已粘贴的文本 u:撤销上一步 U:…...
【2023】LeetCode HOT 100——链表
目录 1. 相交链表1.1 C++实现1.2 Python实现1.3 时空分析2. 反转链表2.1 C++实现2.2 Python实现2.3 时空分析3. 回文链表3.1 C++实现3.2 Python实现3.3 时空分析4. 环形链表4.1 C++实现4.2 Python实现4.3 时空分析5. 环形链表 II5.1 C++实现5.2 Python实现...
智能井盖传感器,物联网智能井盖系统
随着城市人口的不断增加和城市化进程的不断推进,城市基础设施的安全和可靠性变得愈发重要,城市窨井盖作为城市基础设施重要组成部分之一,其安全性事关城市安全有序运行和居民生产生活安全保障。 近年来,各地都在加强城市窨井盖治理…...
C语言三子棋解析
目录(标2的是我自己写的一堆问题不知道怎么改) 开始菜单1打印棋盘1玩家下棋1电脑下棋1判断输赢1开始菜单2打印棋盘2选择先后2玩家下棋2电脑下棋2判断输赢2完整代码文件else.h文件else.c文件test.c 开始菜单1 void menu()//打印菜单 {printf("*****…...
【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】
1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…...
读SQL学习指南(第3版)笔记06_连接和集合
1. 连接 1.1. 笛卡儿积 1.1.1. 交叉连接(cross join) 1.1.2. 查询并没有指定两个数据表应该如何连接,数据库服务器就生成了笛卡儿积 1.1.2.1. 两个数据表的所有排列组合 1.1.3. 很少会用到(至少不会特意用到) 1.…...
C#学习,结构,面向对象,类
结构和类 结构是从过程化程序设计中保留下来的一种数据类型,类则是面向对象程序设计中最基本的、也是最重要的概念。 结构 结构是一种值类型,通常用来封装一组相关的变量,结构中可以包含构造函数、变量、字段、方法、属性、运算符、事件和…...
【PHP】文件操作
文章目录 文件编程的必要性目录操作其它目录操作递归遍历目录PHP5常见文件操作函数PHP4常见文件操作函数其他文件操作函数 文件编程的必要性 文件编程指利用PHP代码针对文件(文件夹)进行增删改查操作。 在实际开发项目中,会有很多内容&…...
科创板50ETF期权交易:详细规则、费用、保证金和开户攻略
科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金(ETF),旨在跟踪科创板50指数的表现,下文介绍科创板50ETF期权交易:详细规则、费用、保证金和开户攻略&am…...
怎么把图片放大并且清晰?有详细的方法步骤
怎么把图片放大并且清晰?数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数,但这会导致失真和模糊。无损放大是一种特殊的放大方法,它可以通过数学算法来增加图片的尺寸&…...
C++ 构造函数、析构函数调用虚函数
C虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己&#x…...
工业状态监测如何选择合适的无线技术?
工业领域的状态监测在提高生产效率和产品质量方面起着关键作用。过去依赖于预防性维护和例行检查的方式已经不再能满足日益复杂的生产需求,随着工业物联网(IIoT)的兴起,设备状态监测逐渐成为一种关键策略,催生了预测性…...
Mysql45讲学习笔记
前言:这篇文章主要总结事务,锁、索引的一些知识点,然后分享一下自己学习小心得,我会从点到线在到面展开说说,对于学习任何知识,我们都应该藐其全貌,不要一开始就选入细节 基础 一、基础架构&a…...
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
报错描述 情景一 1Panel在"主机-->进程守护"通过命令"nohup /opt/tomcat/bin/startup.sh > /opt/supersivor/tomcat/nohup.log &"创建守护进程,运行日志如下: #--------------------------------------------------------…...
opencv 水果识别+UI界面识别系统,可训练自定义的水果数据集
目录 一、实现和完整UI视频效果展示 主界面: 测试图片结果界面: 自定义图片结果界面: 二、原理介绍: 图像预处理 HOG特征提取算法 数据准备 SVM支持向量机算法 预测和评估 完整演示视频: 完整代码链接 一、…...
TypeScript数组和对象的操作
TypeScript数组和对象的操作 一、数组的声明二、数组初始化三、数组元素赋值、添加、更改四、删除五、合并、断开数组六、查找数组元素七、连接数组元素八、排序、反序数组九、遍历数组,对象 一、数组的声明 let arr1: Array<number>; let arr2: number[];二…...
docker之Compose与DockerSwarm
目录 Compose 简介 概念 为什么需要? 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
