C语言面试题之字符串操作

2023-11-17

天做了花了几分钟做了三道C语言面试题,跟大家分享一下:

找错
Void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
}

答:string 大小不够 str1末尾还有一个'\0'

Void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] ='a';
}
strcpy(string, str1);
}

答:字符串没有加’\0’,虽然两个字符数组一样的大,但是没有考虑字符串后面的‘\0,’导致程序出错


Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}


答:对试题3,if(strlen(str1) <= 10) 应改为
if(strlen(str1) < 10),因为strlen的结果未统计'\0'所
占用的1个字节。

当没有给字符串留'\0'的位置时候会出现的奇怪错误 

int     m; 

char        n[6];   

scanf("%d|",&m); 

printf("%d\n",m); 

scanf("%[0-9]|",n);  

printf("%d %s",m,n);  

以上代码当输入 1|600000|时候会输出  

1  

0 600000 

你会发现第一个参数的值变了。这是为什么么呢?当将第二个参数如下声明就会错误消失  

char        n[7];       (PS必须留一个位置给'\0'要不然会出现奇怪的错误)  

我的理解是'\0'不够造成的内存溢出,而这两个内存单元正好是连续的。'\0'赋值到了m上和'\0'的ASCLL码值刚好是0;  

因此我们来做一个实验,我们用最开始的那段代码,即n只有6个内存单元  

这时候我们输入  1|6000001|时候会输出  

1  

49 6000001  

可以发现第一个参数的值变成了49;这恰好是ASCLL码上1的值;这当然不是巧合。你可以试试别的参数。当然如果你的第二个参数输个10位长度那么这会更加明显。  

这也就是为什么我们公司要写那么多宏定义像如下一样的,在定义时就预留了'\0'的位置。就是为了防止我的小白的错误。 

typedef char n[7]; 


剖析:
考查对基本功的掌握:
(1)字符串以'\0'结尾;
(2)对数组越界把握的敏感度;
(3)库函数strcpy的工作方式


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言面试题之字符串操作 的相关文章

  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • 面试题 08.08. 有重复字符串的排列组合--回溯算法

    LeetCode 面试题 08 08 有重复字符串的排列组合 有重复字符串的排列组合 编写一种方法 计算某字符串的所有排列组合 示例1 输入 S qqe 输出 eqq qeq qqe 示例2 输入 S ab 输出 ab ba 解法 回溯法
  • 1658. 合法标识符

    1658 合法标识符 请判断字符串 str 是不是一个合法的标识符 合法的标识符由字母 A Z a z 数字 0 9 和下划线组成 并且首字符不能为数字 样例 样例 1 输入 str LintCode 输出 true 解释 因为 LintC
  • Java数字字符串的判断与转换

    文章目录 引言 一 判断字符串是否为数字 1 1 第三方包StringUtils isNumeric 1 2 Java自带方法Character isDigit 1 3 正则表达式 二 将字符串转化为数字 2 1 整数 2 2 小数 参考
  • 大数(四则运算)

    四则运算 大数加法 高精度加法 大数减法 大数乘法 大数乘法 幂运算 大数乘法 高精度幂运算 大数除法 大数加法 思路 从后往前算 即由低位向高位运算 计算的结果依次添加到结果中去 最后将结果字符串反转 输入的时候两个数都是以字符串的形式输
  • 力扣每日一题——上升下降字符串

    题目链接 class Solution public string sortString string s int len s length 获取字符串长度 char ch 501 创建字符串数组 string sh 创建结果字符串 boo
  • 第一章 pandas基础-练习题

    第一章 pandas基础 练习题 首先要导入对应的模块 import pandas as pd import numpy as np Ex1 口袋妖怪数据集 现有一份口袋妖怪的数据集 下面进行一些背景说明 代表全国图鉴编号 不同行存在相同数
  • 443.压缩字符串

    443 压缩字符串 给你一个字符数组 chars 请使用下述算法压缩 从一个空字符串 s 开始 对于 chars 中的每组 连续重复字符 如果这一组长度为 1 则将字符追加到 s 中 否则 需要向 s 追加字符 后跟这一组的长度 压缩后得到
  • 基础算法题——带分数(全排列,工具库)

    前言 这道题理解起来不难 但是要找到一个合适的方法对题目进行优化 就会相对麻烦些 蓝桥杯的题 真的到处都是坑的感觉 带分数题目 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 100 可以表示为带分数的形式 100 3 6
  • 字符编码简介

    目录 一 ascii编码 二 扩展ascii编码 三 多字节编码 multi bytes 四 宽字符编码 wide char 五 unicode编码 六 utf 8编码 七 结语 大家好 我是略游 本文的目的是讲清楚 字符编码的今生来世 看
  • 突如其来的C#重新学习(2)

    突如其来的C 重新学习 2 关于Main入口点的问题 Main在C 中不能单独声明 所以必须声明在同一个类中 而且必须声明静态方法 返回可以是void或者int 正常执行应当返回0 对于一个命名空间之内有很多的类的情况下 就可以手动选择从哪
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • Python求三位水仙花数

    Python求三位水仙花数 简介 水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 基础掌握 Python str 函数 https www ru
  • Java基础之String类型详解

    目录 1 简介 2 字符串的比较 3 String的实例化方式 1 直接赋值方式 2 构造方法实例化 4 String对象 常量 池 5 字符串修改 6 String类常用方法 1 字符串查找 2 字符串替换 3 字符串拆分 4 字符串截取
  • 数据结构与算法学习总结(六)——字符串的模式匹配算法

    基本概念 字符串是一种特殊的线性表 即元素都是 字符 的线性表 字符是组成字符串的基本单位 字符的取值依赖于字符集 例如二进制的字符集为0 1 则取值只能为 0 1 再比如英语语言 则包括26个字母外加标点符号 例如 abcde 就是一个字
  • 元字符的详细解析

    上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义 但是如果我们只知道那些元字符的含义 不知道怎么使用和加以练习 那么对于正则我们还只是看见了门槛 并没有踏入 那么本篇文章就让我们迈起脚步正式走入正则的世界吧 let s go 我的学
  • Python基础数据类型之字符串(一)

    Python基础数据类型之字符串 一 一 字符串格式化 1 字符串占位符 2 字符串格式化操作 二 f string格式化 三 字符串的索引 四 字符串的切片 1 常规切片使用方法 3 步长的介绍 2 切片使用方法二 一 字符串格式化 1
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • (Java)leetcode-76 Minimum Window Substring(最小覆盖子串)

    题目描述 给你一个字符串 s 一个字符串 t 返回 s 中涵盖 t 所有字符的最小子串 如果 s 中不存在涵盖 t 所有字符的子串 则返回空字符串 注意 如果 s 中存在这样的子串 我们保证它是唯一的答案 示例 1 输入 s ADOBECO
  • Unicode编码小结

    Unicode编码 一 ASCLL码 ASCII American Standard Code for Information Interchange 美国信息交换标准代码 是基于拉丁字母的一套电脑编码系统 主要用于显示现代英语和其他西欧语

随机推荐

  • 【MindSpore易点通】深度学习系列-那些介于模糊与清楚之间的一些概念

    之前小编就给大家提过正则化 超链接 其实还有很多定义大家是有点模糊又有点清楚的 今天好好带大家一起捋一遍 1训练集 验证集 测试集 正确地配置训练 验证和测试数据集 会很大程度上帮助大家创建高效的神经网络 即使是深度学习专家也不太可能一开始
  • Ubuntu18.4开机时进入命令行界面或进入bios设置

    开机时进入命令行界面 开机时按ctrl alt Fx Fx是从F1到F6选择一个 ctrl alt F7切换到图形界面 开机时进入bios设置 开机时按F2
  • c++实现合并两个有序链表

    leetcode题目 力扣 执行结果 代码实现 Definition for singly linked list struct ListNode int val ListNode next ListNode val 0 next null
  • 输入引脚时钟约束_时钟树例外(exclude pin、stop pin、non_stop pin、float pin)

    时钟树例外 exclude pin stop pin non stop pin float pin 回复 以下关键词 查看更多IC设计教程 目前支持的关键词有 Innovus ICC or IC Compiler DC or Design
  • 等保2.0测评综合得分计算

    文章目录 概述 公式及说明 分类计算实例 单一对象 多个对象 结果 未经本人许可 不能转载 转发 2021 6 20更新 2021新版的等保测评报告6 17出炉 6 18启用 新版综合得分计算可以看这里 这里 新版测评综合得分计算实例看 这
  • spring中的单元测试的策略

    本文主要介绍使用spring提供的对junit的扩展机制来进行单元测试 没有设计mock方面的测试 一 Spring提供的JUnit框架扩展 AbstractSpringContextTests spring中使用spring上下文测试的J
  • js高级 7.原型链继承

    原型链继承 套路 定义父类型构造函数 给父类型的原型添加方法 定义子类型的构造函数 创建父类型的对象赋值给子类型的原型 将子类型原型的构造属性设置为子类型 给子类型原型添加方法 创建子类型的对象 可以调用父类型的方法 关键 子类型的原型为父
  • AI人工智能Mojo语言:AI的新编程语言

    推荐 使用 NSDT场景编辑器 快速搭建3D应用场景 Mojo的主要功能包括 类似Python的语法和动态类型使Python开发人员易于学习Mojo 因为Python是现代AI ML开发背后的主要编程语言 使用Mojo 您可以导入和使用任何
  • RPC(远程过程调用)详解

    转自 https blog csdn net daaikuaichuan article details 88595202 仅用于自己学习使用 如有侵权删 一 RPC是什么 RPC是指远程过程调用 也就是说两台服务器A B 一个应用部署在A
  • 单片机串口中断以及消息收发处理——对接受信息进行判断实现控制

    目录 本次自己捣鼓的问题 自己摸索的一个实验 实现效果 初步基础 实现步骤 实验结果 主要代码 本次自己捣鼓的问题 自己摸索的一个实验 以51的单片机来说 用定时器2作为串口1来进行串口实验 检验以下的数据 任意数据 hello 1 yzh
  • npm node-sass 安装错误

    控制台运行npm install时报错 报错信息如下 npm ERR code ELIFECYCLE npm ERR errno 1 npm ERR node sass 4 9 2 postinstall node scripts buil
  • log4j2漏洞原理简述

    影响版本 Apache Log4j 2 x lt 2 14 1 jdk不知道 有知道的师傅麻烦告诉下 漏洞原理 由于Apache Log4j存在递归解析功能 lookup 未取得身份认证的用户 可以从远程发送数据请求输入数据日志 轻松触发漏
  • JAVA 基数排序算法(详细实现过程介绍)

    基数排序 是将整数按位数切割成不同的数字 然后按每个位数分别比较从而得到有序的序列 本文以数组中元素均为正整数来演示 给定一个数组 arr 53 3 542 748 14 214 准备十个桶 0 9 第一轮按照元素的个位数排序 0 9的各个
  • ffmpeg提取视频分辨率输出为批处理变量

    在使用ffmpeg批处理编码视频时候 如果导入的素材尺寸不一样 得每次输入分辨率很麻烦 这里提供一个自动提取拖入的视频文件的分辨率的批处理脚本 另存为bat即可 需要文件夹下有ffprobe exe 原理是通过ffprobe exe把媒体信
  • Python 列表的定义

    视频版教程 Python3零基础7天入门实战视频教程 容器 容器是一种可以存储多个元素的数据类型 Python中的容器有 列表list 元组tuple 字符串str 集合set 字典dict 列表list 列表是多个元素的集合 列表的定义
  • 安装LR提示“此计算机缺少 vc2005_sp1_with_atl_fix_redist,请安装所有缺少的必要组件,然后重新运行此安装“

    安装LoadRunner 11时弹窗提示 Micosoft Visual C 2005 SP1 可再发行组件包 X86 命令行选项语法错误 键入命令 可获得帮助信息 或者弹窗提示 此计算机缺少 vc2005 sp1 with atl fix
  • 如何更好地使用Kafka?

    引言 要确保Kafka在使用过程中的稳定性 需要从kafka在业务中的使用周期进行依次保障 主要可以分为 事先预防 通过规范的使用 开发 预防问题产生 运行时监控 保障集群稳定 出问题能及时发现 故障时解决 有完整的应急预案 这三阶段 事先
  • vue2父子组件双向绑定

    一 v model指令 当在Vue 2中实现父子组件的双向数据绑定时 主要涉及以下几个步骤 在父组件中定义要传递给子组件的数据 并使用v model指令将数据传递给子组件 在子组件中声明一个props接收来自父组件的数据 并在子组件内部使用
  • .NET 最便捷的Log4Net日志记录器

    最便捷的Log4Net使用方法 LOG4NET 配置日志记录器 开始 引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标 log4net是优秀的Apache
  • C语言面试题之字符串操作

    今 天做了花了几分钟做了三道C语言面试题 跟大家分享一下 找错 Void test1 char string 10 char str1 0123456789 strcpy string str1 答 string 大小不够 str1末尾还有