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

字符串的内存存储

对于支持单字符的编程语言,比如C/C++, 字符被当成整型保存,当作整数做运算,简单直接。字符串数据更多,分配新的内存区域保存更合适。

存储格式

  • C/C++对于char *字符串只利用一个规则,结尾为NULL字符’\0’算结束,只保存首地址,不需保存长度。C++支持string类,一般会封装字符串data指针和长度讯息(加速获取字符串长度)。
    • char *字符串天生的缺点是如果忘记了结束的’\0’将一直被当做字符串数据。
    • 修改”hello”为”he\0llo”, 字符串变为”he”.
  • C++ string类提供c_str()返回const char *指针。data()和c_str()一样,C++17修改为非const字符串返回char *.
  • Delphi在字符串数据前面插入长度信息。
  • Java String类封装数据成员char value[], 早期版本有hashCode成员辅助,新版本增加了encoding,可支援更小数据量的Latin编码。

太长的字符串

大部分编程语言提供续行符连接成更长的字符串。

  • C/C++

char str[100] = “Hello, \
World!”;

运行结果为:Hello, World! (中间有3个空格) 当然编译也会告警:warning: backslash and newline separated by space.

为了避免续行后行开始的空格被当做字符串,也提供字面量相连的方式。

char str[100] = "Hello, " "World!"; // 输出Hello, World! (中间只有一个空格)

C++11原始字面量包裹的字符串不用续行符就可以换行,换行保存在字符串中。

  • C#

不支持’\’续行符连接字符串,可以在字符串前面加’@’符号连接字符串,缺点一样是会把回车符加进去。一种比较好的做法是直接用’+’运算符做字符串连接。

  • Python

Python字符串里面的续行符不会自动加换行,这很不错。如下a字符串为: “aaabbb”

a = “aaa\

bbb”

同样也支持字面量相连,a = ‘a”b’ # a字符串为 “ab”


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Python+docx+sqlite3将Word表格内容写入sqlite表中
  • 区块链入门
  • Postman注册使用
  • 七、Centos安装LDAP--Docker版--已失败
  • 探索分析文档布局,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建大规模文档数据集DocLayNet场景下文档图像布局智能检测分析识别系统
  • elasticsearch之我不会的
  • Docker 部署 net6 webapi项目
  • 【ElasticSearch】基本命令
  • 【功能自动化】自动识别测试用例
  • zdppy+vue3+onlyoffice文档管理系统实战 20240829上课笔记 Python验证码框架完成
  • Python统计FreeMind测试用例数量
  • C语言阴阳迷宫
  • SparkShop开源商城 uploadFile 任意文件上传漏洞复现
  • LabVIEW项目中硬件选型与长期需求沟通
  • OSI七层模型中的数据链路层
  • 「面试题」如何实现一个圣杯布局?
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS 提示工具(Tooltip)
  • express如何解决request entity too large问题
  • jquery ajax学习笔记
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • laravel 用artisan创建自己的模板
  • laravel5.5 视图共享数据
  • Objective-C 中关联引用的概念
  • Rancher如何对接Ceph-RBD块存储
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用 Docker 部署 Spring Boot项目
  • 为什么要用IPython/Jupyter?
  • 在Mac OS X上安装 Ruby运行环境
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #在 README.md 中生成项目目录结构
  • (13)Hive调优——动态分区导致的小文件问题
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (算法设计与分析)第一章算法概述-习题
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)ORM
  • (转)socket Aio demo
  • (转)大道至简,职场上做人做事做管理
  • .Net Web项目创建比较不错的参考文章
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 受管制代码
  • .net 托管代码与非托管代码
  • .net6Api后台+uniapp导出Excel
  • .Net多线程Threading相关详解
  • .NET中统一的存储过程调用方法(收藏)
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C#学习笔记]Newtonsoft.Json