c风格字符串,字符串字面值,c++字符串
C风格字符串:本质上就是以空字符null为结束符的数组
可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组
字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示。
C++字符串:通俗而言是string类,为和c语言兼容,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。(实际上在c++中,string最好直接理解为一个基本类型,相关操作都封装在string类中,避免使用char *出错)
由下面的代码可以看出:
int main()
{
char str1[] = {'H','e','l','l',''};
char str2[] = {'H','e','l','l',''};
//char str3[5] = "Hello"; //error
char str4[] = "Hello";
cout << sizeof(str1) << endl; //
cout << sizeof(str2) << endl; //
cout << strlen(str1) << endl; //
cout << strlen(str2) << endl; //
cout << strlen(str4) << endl; //
cout << str1 << endl; //Hell0烫烫烫潭9媭?
cout << str2 << endl; //Hell0
cout << str4 << endl; //Hell0
char str5[] = {'H','e','l','l',''};
char str6[] = {'H','e','l','l',''};
cout << sizeof(str5) << endl; //
cout << sizeof(str6) << endl; //
cout << str5 << endl; //Hell0
cout << str6 << endl; //Hell0烫烫烫潭9媭?
char str7[] = "Hello";
char str8[] = "Hello";
cout << sizeof(str7) << endl; //
cout << sizeof(str8) << endl; //
cout << strlen(str8) << endl; //
string str9 = "Hello";
cout << str9.size() << endl; //
}
写成“Hello”形式时,都必须给'\0'预留空间(必须有),要不然会直接报错,其sizeof大小为6,但是其strlen为5(说明这种形式的时候会自动加一个'\0',sizeof是求变量占用空间,因此带上'\0'大小,strlen是只计算有效字符个数,null之前字符个数)
如果char *数组大小和字符个数相等时(或者未显示分配大小):分开来写成{'H','e','l','l','0'}形式时,其数组大小可以直接和字符个数相等,其sizeof就是字符个数,不会自动补齐‘\0’,但是打印或者处理的时候,因为找不到结束符,因此会处理到其他内存的内容,有很大的隐患。
如果char *数组大小大于字符个数,则也会补一个‘\0’
因此以char *形式处理字符串的时候一定要注意结束符以及是否溢出,如果空间预留过大又浪费空间
而且修改或者特殊查询的时候还得创建副本
而string则不需要注意这些,空间对象如何分配,是否要创建副本由类内部处理,用户可以当作普通变量处理,而且string作为c++标准库,有很多方法都有现成的,直接在API上就可以查询到,方便快捷
c风格字符串,字符串字面值,c++字符串的更多相关文章
- C#给字符串赋予字面值——字符串插入、转义序列的使用
1.占位符.字符串插入 给字符串赋予字面值时,经常遇见在字符串中包含变量的情况,用连接符进行拼接.转换的方式比较麻烦.还容易出错.C#提供了较为便捷的处理方式,即‘占位符’,以及C#6的新功能‘插入字 ...
- C#中字符串的字面值(转义序列)
在程序开发中,经常会碰到在字符串中字面值中使用转义序列,下面表格收集了下转义序列的完整列表,以便大家查看引用: 转义序列列表 转义序列 产生的字符 字符的Unicode值 \' 单引号 0x0027 ...
- 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值
016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...
- Swift3.0语言教程使用字符串创建和初始化字符串
Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...
- 区分/不区分大小写的比较,查找字符串在另一字符串中的位置,字符串开头是否包括另一字符串 hasPrefix
NSString *str; // 使用stringWithFormat生成一格式化字符串 str = [NSString stringWithFormat:@"This is %@&quo ...
- python字符串、字符串处理函数及字符串相关操作
python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...
- C/C++判断字符串是否包含某个字符串
C风格 #include <iostream> #include <string> #include <cstring> using namespace std; ...
- JS字符串替换函数:Replace(“字符串1″, “字符串2″),
JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...
- C#算法之判断一个字符串是否是对称字符串
记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...
- 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
/* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...
随机推荐
- css中的单位
一.相对长度单位: 相对长度是根据与其他事物的关系来度量的.共有3种相对长度单位:em,ex,px. 1个“em”定义为一种给定字体的font-size的值,例如,一个元素的font-size为14像 ...
- MVVM指南(课程学习)
iOS MVVM 参考 iOS MVVM 前世今生 iOS MVVM 优缺点 下面是我对MVVM知识的总结,主要包括模块划分.开发步骤.重点解说三部分.做这篇文章,主要是考虑总结出可执行的开发步骤,按 ...
- Core Data使用之一(Swift): 保存
Core Data 用于永久化数据,它是基于SQLite数据库的保存一门技术. 那么,在Swift中,它是如何实现的呢? 首先,需要新建一个模板,打开工程中的xcdatamodeld文件,点击“Add ...
- iOS 之 NSString 去除前后空格和回车键
NSString *string = @" spaces in front and at the end "; NSString *trimmedString = [string ...
- iOS 之 KVC KVO
KVC:键值编码,是一种间接访问对象实例变量的机制,可以不通过存取方法(getter setter)就可以访问实例变量. KVO: 属性变化的通知机制
- WinAPI: GetClassName - 获取指定窗口的类名
WinAPI: GetClassName - 获取指定窗口的类名 //声明: GetClassName( hWnd: HWND; {指定窗口句柄} lpClassName: PChar; {缓冲区} ...
- window.open a.href打开窗口referer的问题
window.open a.href打开窗口referer的问题: JSP: <%@ page language="java" import="java.util. ...
- JSP EL表达式 获得 request的GET/POST方法
JSP EL表达式 获得 request的GET/POST方法: 不在requestScopse中: <p>得到request的方法</p> <p>pageCont ...
- doubango(4)--SIP协议栈传输层的启动
协议栈的默认传输结构 对于一个刚启动的协议栈来说,它需要有一个传输层,支持若干的传输结点.每一个传输结点对应于一个端口,若采用TCP连接,一个传输结点就针对于一个点到点的连接,这个连接负责sip信令的 ...
- 框架基础:ajax设计方案(三)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...