C风格字符串与C++风格字符串
C风格字符串与C++风格字符串
C风格字符串:对字符串进行操作的 C 函数定义在头文件<cstring>中;
1. 字符串定义:char* result;
2. 字符串的最后一个字符是null字符('\0'),可以通过这个字符确定字符串的结尾。
3. strlen()返回的是字符串的大小;因此,分配空间的时候,需要比字符串的实际空间大1.
e.g. char* copyString(const char* inString)
{
char *result = new char[strlen(inString)];//BUG! off by one
strcpy(result, inString);
return result;
}
explain: strlen()返回的是字符串的大小,比如"ab",返回的是2。而在new进行分配的时候,需要为'\0'分配一个空间。分配语句要写作,char *result = new char[strlen(inString) + 1];
4. strcpy(a,b):将字符串b的内容赋值给字符串a;a的大小可以大于b,将b放在a的开始的位置;
strcat(a,b):将字符串b拼接到字符串a的现有字符后面;
C++风格字符串:使用C++风格字符串的时候,要将它当做是一个普通的类型,如int,这样反而会避免将string作为一个类来理解所带来的很多问题。
1. 支持<cstring>中许多函数完成的同样操作。
2. 字符串定义:string myString = “hello”;
3. 操作符 = :复制字符串;比如,string newone = original;会将后者复制给前者,不会出现两个变量同样指向一个内存的情况。
4. 可以像int一样使用 == 之类的操作符
5. 可以改变字符串中的某一个字符。 如 string myString = "hello"; mystring[0] = 'l'; 这中操作是允许的。
字符串直接量:字符串没有变量名字,自身表示自身。
1. string literal:字符串直接量: e.g. cout<<"hello"<<endl; 代码中通过包含"hello"字符串自身来将其输出,并未包含该字符串的变量。
2. 字符串直接量可以赋值给变量,但是与字符串直接量相关联的内存空间位于只读部分,因此它是常量字符数组。
char* ptr = "hello";
ptr[1] = 'a';//crash! attemps to write to read-only memory.
因此,当引用字符串直接量的时候使用指向const的字符数组:
const char* ptr = "hello";
ptr[1] = 'a';//bug! attempts to write to read-only memory.
3. 当将字符串直接量赋值给字符数组的初始值的时候。由于字符数组存放与栈中,不允许引用其他地方的内存,因此编译器会将字符串直接量复制到站的数组内存中。因此,可以进行相应的修改。
char stackArray[] = "hello";
stackArray[1] = 'a';
C风格字符串与C++风格字符串的更多相关文章
- string字符串转C风格字符串 进而转换为数字
要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要 ...
- camel-name-utils 在驼峰风格跟下划线风格之间切换
用处 用来将字符串在驼峰风格跟下划线风格之间切换. 对于一般人可能没用.对于写orm框架的人有点作用. 样例: company_name -> companyName 安装方式 加入下面依赖到p ...
- 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 ...
- 【编程题目】有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配...
37.(字符串)有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配,则两个字符串可以联接,问这 n 个字符串最多可以连成一个多长的字符串,如果出现循环, ...
- loadrunner通过字符串左右边界切割字符串
void web_reg_save_param_custom(char *sourceStr, char* outpuStr, char *leftBdry, char *rightBdry){ ...
- Swift3.0语言教程使用字符串创建和初始化字符串
Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...
随机推荐
- springMVC+mybatis 增删该操作后判断影响行数一直返回-2147482646
MyBatis发现更新和插入返回值一直为"-2147482646"的错误是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失.mybati ...
- ubuntu14.04切换root用户
打开命令窗口(CTRL+ALT+T),输入:sudo -s -->接着输入管理密码, -->已经切换到root用户
- iOS开发小技巧--纯代码自定义cell
纯代码自定义cell 自定义cell的步骤(每个cell的高度不一样,每个cell里面显示的内容也不一样) 1.新建一个继承自UITableViewCell的子类 2.在initWithStyle:方 ...
- Redis集群(一):基本概念
一.使用版本:3.0.0.0 二.基本概念: 号至 11000 号的哈希槽, 这样集群就不会因为主节点 B 的下线而无法正常运作了. 异步复制(虽然是异步复制,但是执行写命令和复制命令到从节点几乎是 ...
- 三、基础功能模块,用户类别管理——锁、EF并发处理、领域服务、应用服务的划分
在上一章节中,我们处理了MVC多级目录问题,参见<二.处理MVC多级目录问题——以ABP为基础架构的一个中等规模的OA开发日志>.从这章开始,我们将进入正式的开发过程.首先,我们要完成系统 ...
- 微信扫码支付 php
仔细看了一遍官方的那幅流程图,我来简化理解一下(注意:我这里针对的是扫码支付模式一,模式二没什么说的)网站后台生成二维码,当然是跟据前台传来的参数有条件的生成买家扫描二维码,扫描过程中,微信后台系统回 ...
- C#-WinForm-公共控件的基本属性及练习
视图→工具箱 基本操作:控件的取值.赋值.改值.事件 1.Button --按钮 AutoSize-指示该控件是否自动调整自身的大小以适应其内容的大小. 默认False,此时文字内容超过其宽度时自动 ...
- 使用redis避免客户端频繁提交数据
避免客户端频繁向服务器提交表单的解决方案 使用redis 在order的model中增加函数 ) { try{ $key = "lock_" . $key; $num = $thi ...
- 当findById(Integer id)变成String类型
1.原Action // 添加跳转 @RequiresPermissions("pdaManager:v_add") @RequestMapping("/pdaManag ...
- [poj2446]Chessboard
Description 给定一个m×n的棋盘,上面有k个洞,求是否能在不重复覆盖且不覆盖到洞的情况下,用2×1的卡片完全覆盖棋盘. Input 第一行有三个整数n,m,k(0<m,n<=3 ...