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

字符串中的转义字符与字符串的长度

提示:

(1)计算字符串长度时关键是要注意辨认转义字符;

(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!!!

示例:

1、不带转义字符的字符串

  如:“abc!x=/”,strlen求其长度为 7,但是因为字符串在末尾还有一个终止符‘\0’,因此字符串占8个字节,长度为8.

 

2、带转义字符的字符串

  (1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的长度为5(而不是6)

  (2) 字符串“abc\n\\\'\"":其中有4个转义字符:'\n'(换行符)、'\\'(反斜杠)、'\''(单引号)、'\"'(双引号),所以该字符串的长度为8(而不是12)。

  (3) 字符串“abc\0xyz”:其中有一个转义字符'\0',它是字符串结束符,所以,当用函数strlen来测试该字符串的长度时,结果应该为4(而不是8)。

  (4) 字符串“abc\\0xy”:其中有一个转义字符'\\'(反斜杠),这样,后面的字符串“0xy”照样计算,所以,该字符串的长度为7(而不是将第二个反斜杠与其后的0结合为一个转义字符'\0',若那样的话,第一个反斜杠将无法处理,因为一个转义字符总是由反斜杠加其他字符组成的,单独的一个反斜杠不能作为任何合法的字符)。

  (5) 若将字符串“abc\\0xy”改为“abc\\\0xy”:则其中有二个转义字符'\\'(反斜杠)和'\0'(字符串结束符),这时,当用函数strlen来测试该字符串的长度时,结果应该为5(而不是8)。

  (6) 若将字符串“abc\\\0xy”改为“abc\\\061xy”:则其中有二个转义字符'\\'(反斜杠)和'\061'(ASCII码值等于061的字符,也即数字字符'1'),这时,当用函数strlen来测试该字符串的长度时,结果应该为7(而不是4或9)。所以,当遇到转义字符'\0'时,还要看其后面是否还有数字,若有,则应将后面的数字(一至二位)与前面的'\0'相结合作为一个字符计入整个字符串的长度。

    若用printf(“abc\\\061xy”);输出,则输出结果为:abc\1xy

注意使用strlen求字符串长度是是不计算末尾的终止符的,但是字符串所占的字节数是包括终止符。

 

例题一:[1995年二级C笔试选择题(26)]

请选出以下语句的输出结果(  )

printf("%d\n",strlen("\t\"\065\xff\n"));

(A) 5  (B) 14  (C) 8  (D) 输出项不合法,无正常输出

正确答案是(A):字符串中包含的5个字符是:'\t'(跳格符)、'\"'(双引号)、'\065'(ASCII值为八进制065,也即十进制为51的字符)、'\xff'(ASCII值为十六进制ff,也即十进制为255的字符)、'\n'(换行符)。

例题二:[1998年二级C笔试选择题(44)]

若有以下程序段:

char str[]="ab\n\012\\\"";

printf("%d",strlen(str));

上面程序段的输出结果是

A) 3 B) 4 C) 6  D) 12

正确答案是(C):字符串中包含的6个字符是:'a'、'b'、'\n'、'\012'、'\\'和'\"'。如果这一问题是问字符串的长度,则为7。

相关文章:

  • 测试图片
  • php排序
  • 使用tomcat数据源(JNDI)
  • windows单节点下安装es集群
  • CentOS 7 安装配置LAMP服务器方法(Apache+PHP+MariaDB)
  • 移动开发技术新趋向(一)
  • c++编译后的函数名转换成正常函数
  • 最大连续数列和
  • 《人,绩效和职业道德》及博客的读后感
  • Java笔记17:导出可执行jar包
  • PHP 报告分拣和生产理念
  • yum 安装包时提示Error: Missing Dependency: php-common
  • GO --微服务框架(二) goa
  • 给电脑配置镜像,加快npm下载第三方依赖包速度
  • 深入理解java异常处理机制
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • es6(二):字符串的扩展
  • Go 语言编译器的 //go: 详解
  • HTTP--网络协议分层,http历史(二)
  • Javascript基础之Array数组API
  • js对象的深浅拷贝
  • PHP 7 修改了什么呢 -- 2
  • Python中eval与exec的使用及区别
  • SpringCloud集成分布式事务LCN (一)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue 个人积累(使用工具,组件)
  • Vue.js源码(2):初探List Rendering
  • Vue官网教程学习过程中值得记录的一些事情
  • 跳前端坑前,先看看这个!!
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 再谈express与koa的对比
  • 在Unity中实现一个简单的消息管理器
  • !$boo在php中什么意思,php前戏
  • #FPGA(基础知识)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C语言)二分查找 超详细
  • (安卓)跳转应用市场APP详情页的方式
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)C#调用WebService 基础
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • . NET自动找可写目录
  • .gitattributes 文件
  • .Net Redis的秒杀Dome和异步执行
  • .NET开源快速、强大、免费的电子表格组件
  • @GlobalLock注解作用与原理解析