C++的string类型和继承C语言风格的字符串的区别与注意事项
1、尽可能地在C++程序中使用string,不要使用继承而来的C语言风格的字符串,会出现许多安全问题。
2、C语言的字符串风格,是以空字符结束的,在C++的头文件cstring中定义了C语言风格的字符串函数,
例如strlen(p); 返回p的长度,并且不把空字符计入,但是该函数只有检索到空字符才返回。所以传给该函数的p必须是一个包含空字符的字符串(数组)。
3、比较字符串,string类型的字符串之间的比较是字符串本身的比较,返回的值是false 或者 true。而C语言风格的strcmp(p1,p2); 其参数是两个指针之间的比较。
4、连接字符串,string类型连接字符串使用的是+运算符,不需要关注存储连接后的字符串的空间是否足够。而C语言风格的strcat(p1,p2); 则需要关注p1的大小是否足够容纳p1和p2连接之后的大小。
5、以上的C语言风格的字符串函数,都是不验证其中字符串的参数。
6、对数组的操作,实际上是对指针的操作。
7、使用C语言风格的strcmp函数的返回值,不能一概而论为0,-1,1。具体的编译器的返回值不同,但是大于:正数>0;小于:负数<0;等于:0;肯定正确。
C++的string类型和继承C语言风格的字符串的区别与注意事项的更多相关文章
- 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...
- Java中String类通过new创建和直接赋值字符串的区别
方式一:String a = “aaa” ; 方式二:String b = new String(“aaa”); 两种方式都能创建字符串对象,但方式一要比方式二更优. 因为字符串是保存在常量池中的,而 ...
- C#中string类型是值类型还是引用类型?
.Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串. string类型(引用类型) 名称 CT ...
- C#中string类型是值类型还是引用类型?(转)
出处:https://www.cnblogs.com/dxxzst/p/8488567.html .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一 ...
- C#中特殊的string类型
string C#有string关键字,在翻 ...
- string类型的解释与方法
基本概念 string(严格来说应该是System.String) 类型是我们日常coding中用的最多的类型之一.那什么是String呢?^ ~ ^ String是一个不可变的连续16位的Unico ...
- C++之string类型详解
C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...
- C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》
前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
随机推荐
- Go语言学习之2 包、函数、常量、数据类型、字符操作
第一部分:基本数据类型和操作符 1. 文件名&关键字&标识符 (1)所有go源码以.go结尾 (2)标识符以字母或下划线开头,大小写敏感,比如: a. boy b. Bo ...
- English trip V1 - B 4.How Do You Make a Salad? 请给我一间房? Teacher:Julia Key:imperatives 祈使句
In this lesson you will learn to give instructions. 这节课你将将学会给出指示. 课上内容(Lesson) 词汇(Key Word ) bell pe ...
- hadoop ssh 端口-ssh-copy-id详解
ssh-copy-id详解 http://www.blogdaren.com/post-1815.html 服务器时常需要配置无密码的登录方式,最一般的设置方式如下: 使用ssh-keygen和ssh ...
- 删除 github 相应仓库下的文件(不删除仓库)
1.git clone url(仓库的ssh) 将仓库克隆 到本地 2.进入到本地仓库文件夹 将想要删除的文件删除 3.右键 git bash here 4.git add . 5.git comm ...
- linux下对数据库操作
1. mysql -udev -pxxxxxxx // 备注:-u 用户名 -p 密码 2. show databases; // 查看有哪些数据库 3. use datebase; // 使用哪些数 ...
- 堆排序 GPLT L2-012 关于堆的判断
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888 分析:这题看起来非常唬人,其实不难 ...
- sqlite3 删除数据
cx = sqlite3.connect("c:/数据库地址") # 打开数据库cu = cx.cursor()# delete the rowcu.execute("d ...
- Leetcode 1006. 笨阶乘
1006. 笨阶乘 显示英文描述 我的提交返回竞赛 用户通过次数305 用户尝试次数347 通过次数309 提交次数665 题目难度Medium 通常,正整数 n 的阶乘是所有小于或等于 n 的 ...
- oracle查看列数据类型
select * from user_tab_columns where table_name = upper('表名')
- ASP.NET controller TO view 数据传递
https://stackify.com/viewbag/ In the case of ASP.NET MVC, you have three ways to pass data from the ...