C语言--字符串面试题

字符串是由若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串做了特殊的规定。下面分别讨论C/C++字符串的特性。
C/C++中每个字符串都以字符"0作为结尾,这样我们就能很方便地找到字符串的最后尾部。但由于这个特点,每个字符串中都有一个额外字符的开销,稍不留神就会造成字符串的越界。比如下面的代码:

char str[10]="";
strcpy(str,"0123456789")

 我们先声明一个长度为10的字符数组,然后把字符串"0123456789"复制到数组中。

"0123456789"这个字符串看起来只有10个字符,但实际上它的末尾还有一个"0字符,因此它的实

际长度为11字节。要正确地复制该字符串,至少需要一个长度为11字节的数组。


 一个面试题:

请你分析一下的代打:输出的结果是什么

int main()
{char str1[] = "hello world";char str2[] = "hello world";if (str1 == str2)printf("str1 and str2 are same\n");elseprintf("str1 and str2 are not the same\n");const char* str3 = "hello world";const char* str4 = "hello world";if (str3 == str4)printf("str3 and str4 are same\n");elseprintf("str3 and str4 are not the same\n");return 0;
}

 运行结果:

字符串1和2不相等,字符串3和4是相等的。

分析:

为了节省内存,C / C++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。str1和str2是两个字符串数组,我们会为它们分配两个长度为12字节的空间,并把"hello world"的内容分别复制到数组中去。这是两个初始地址不同的数组,因此 str1和 str2 的值也不相同,所以输出的第一行是"strl andstr2 are not same"str3和str4是两个指针, 我们无须为它们分配内存以存储字符串的内容而只需要把它们指向"hello world"在内存中的地址就可以了。由于"helloworld"是常量字符串,它在内存中只有一个拷贝,因此str3和str4 指向的是同一个地址。所以比较str3和str4的值得到的结果是相同的,输出的第二行是"str3 and str4 are same"。


本篇完!

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

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

相关文章

Android 15 首个开发者预览版到来

作者 / 工程副总裁 Dave Burke Android 15 的首个开发者预览版现已发布,以便各位开发者能与我们通力协作,打造更优秀的 Android 平台。 在 Android 15 中,我们继续致力于打造一个既能提升工作效率,又能提供全新功能的平台。这些新…

【Java - 框架 - Mybatis】(02) SpringBoot整合Mybatis操作Mysql - 快速上手

“SpringBoot"整合"Mybatis"操作"Mysql” - 快速上手; 环境 Java版本"1.8.0_202";Spring Boot版本"2.5.9";Windows 11 专业版_22621.2428;IntelliJ IDEA 2021.1.3(Ultimate Edition)&a…

Java基础面试题整理2024/3/13

1、可以使用switch的数据类型 Java5以前,switch(arg)表达式中,arg只能是byte、short、char、int。 Java5之后引入了枚举类型,也可以是枚举类型。 Java7开始引入了字符串类型。 2、Java中的goto有什么作用 goto是Java中的保留字&#xff0c…

【Rust】——枚举与模式匹配

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

2.案例、鼠标时间类型、事件对象参数

案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析&#xff1a;// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …

Day15 面向对象进阶——接Day14

Day15 面向对象进阶——接Day14 文章目录 Day15 面向对象进阶——接Day14一、访问修饰符二、Object三、深入String的equals()方法四、final 一、访问修饰符 1、含义&#xff1a;修饰类、方法、属性&#xff0c;定义使用的范围 2、经验&#xff1a; 2.1.属性一般使用private修…

JavaScript进阶:js的一些学习笔记

文章目录 1. js作用域2. 函数3. 解构赋值 1. js作用域 作用域规定了变量能够呗访问的范围&#xff0c;离开这个范围&#xff0c;这个变量就不能够被访问到。 局部作用域&#xff1a;可以分为函数作用域和块作用域 块作用域&#xff0c;let 声明会产生块级作用域&#xff0c;va…

武汉星起航:秉承客户至上服务理念,为创业者打造坚实后盾

在跨境电商的激荡浪潮中&#xff0c;武汉星起航电子商务有限公司一直秉持着以客户为中心的发展理念&#xff0c;为跨境创业者提供了独特的支持和经验积累&#xff0c;公司通过多年的探索和实践&#xff0c;成功塑造了一个以卖家需求为导向的服务平台&#xff0c;为每一位创业者…

window python开发环境搭建- Anaconda

window python开发环境搭建- Anaconda 下载Anacnoda配置Anconda验证Anaconda是否安装成功验证 conda 是否安装成功验证 pip 是否安装成功验证 python 是否安装成功 配置镜像源conda 镜像源pip 镜像源 pip 常用命令conda 常用命令 下载Anacnoda anacoda官网地址 https://www.an…

hive库表占用空间大小的命令

1、查每个hive表占用的空间大小 hdfs dfs -du -h /user/hive/warehouse 2、按占用空间大小降序排列 hdfs dfs -du /user/hive/warehouse/ipms.db | sort -nr 3、查某一个分区占用空间大小&#xff08;单位G) hadoop fs -ls /user/hive/warehouse/ipms.db/dw_ft_se_nt_u_gen…

如何在vscode中误删了文件怎么办

一、问题描述 在vscode中误删了文件&#xff0c;遇到了好几次这种情况&#xff0c;今天在网上看到了解决方案&#xff0c;记录一下。 二、解决方案 快捷键&#xff1a;ctrlshiftp 输入命令Find Entry to Restore 既可查看过去文件历史&#xff0c;从里面就能找到删除的文件。

【vue在主页中点击主页面如何弹出一个指定某个页面的窗口】

【vue在主页中点击主页面跳转到某个页面的操作完整过程】 1.首先在主页面中加入一个卡槽用于展示弹出的窗口 代码如下&#xff1a; <el-dialog :visible.sync"dialogVisible1" :close-on-click-modal"false" :title"title" class"dial…

代码随想录算法训练营第八天|344. 反转字符串

344. 反转字符串 已解答 简单 相关标签 相关企业 提示 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#…

[LeetCode][LCR 194]二叉树的最近公共祖先

题目 LCR 194. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如&#xff0c;给定如下二叉树: root [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 1 输出: 3 解释: 节点 5 和节点 1 的最…

#微信小程序(轮播图以及开发方法)

1.IDE&#xff1a;微信开发者工具 2.实验&#xff1a;轮播图以及正确的开发方法 &#xff08;1&#xff09;有HTML&#xff0c;CSS&#xff0c;javascript基础即可 &#xff08;2&#xff09;写界面一定要查看开发手册&#xff0c;这是微信小程序比较好的地方&#xff0c;由于…

QT----基于QT的人脸考勤系统(未完成)

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

机试:成绩排名

问题描述: 代码示例: #include <bits/stdc.h> using namespace std;int main(){cout << "样例输入" << endl; int n;int m;cin >> n;int nums[n];for(int i 0; i < n; i){cin >> nums[i];}// 排序for(int i 0; i < n; i){//…

IP地址无所遁形!试试这个3k星热门开源查询神器!

在日常开发中&#xff0c;我们经常需要查询IP地址的位置信息&#xff0c;比如&#xff1a; 网站统计&#xff1a;统计用户的来源地&#xff0c;了解访问者分布情况&#xff1b;安全防护&#xff1a;根据IP地址判断用户是否来自风险地区&#xff0c;加强安全防护措施&#xff1…

13.7 Map 接口(血干JAVA系列)

这里写目录标题 13.7.1 Map接口简介13.7.2 Map.Entry接口简介13.7.3 Map接口的常用子类1.新的子类&#xff1a;HashMap2.相关操作实例(1)实例操作1——向集合中增加和取出内容【例13.26】增加和取得内容 (2)实例操作2------------ 判断指定的key或value是否存在【例13.27】判断…

VMware16如何克隆虚拟机

目录 克隆虚拟机方式一(在Windows上复制粘贴)克隆虚拟机方式二(使用VM的克隆操作 克隆之前需要关机)修改克隆机的IP和主机名虚拟机快照虚拟机的迁移和删除 克隆虚拟机方式一(在Windows上复制粘贴) 直接拷贝一份你已经安装好的虚拟机 复制到目的主机上 然后用VM就能打开它 甚至…