字符串字面值、C风格字符串、C++风格字符串

WRF-CHEM 新手向实践(四):化学初始/边界场及namelist设置 这是这个系列的最后一节了,这些经验是自己作为一个半路出家的外行一步步摸索出来的,其中不免有很多理解不到位的地方,但也正是如此,我相信这是目前新手入门wrf-chem最友好的教程之一,希望能对大家有实质性的帮助。本节继续未完成的内容。在mozbc生成化学初始和边界条件之前,还需要先在wrfinput文件中开启化学部分。 阅读详情

一、字符串字面值

字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。
字符串没有变量名字,自身表示自身

"Hello World!" //simple string literal
"" //empty string literal
"\nCC\toptions\tfile.[cC]\n" //string literal using newlines and tabs

字符字面值: 'A' //single quote:character literal
字符串字面值: "A" //double quote:character string literal.包含字母A和空字符的字符串

字符串字面值的连接:

std::out << "a multi-line "+
"string literal"+
" using concatenation"
<< std::endl;

输出:a multi-line string literal using concatenation

多行字面值:

std::out << "a multi-line \n
string literal\n
using a backslash"
<< std::endl;

输出:a multi-line string literalusing a backslash

=================================================

1. string literal:字符串直接量:

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++风格字符串:使用C++风格字符串的时候,要将它当做是一个普通的类型,如int,这样反而会避免将string作为一个类来理解所带来的很多问题。


1. 支持<cstring>中许多函数完成的同样操作。
2. 字符串定义:

string myString = “hello”;

3. 操作符 = :复制字符串;比如:

string newone = original;

会将后者复制给前者,不会出现两个变量同样指向一个内存的情况。
4. 可以像int一样使用 == 之类的操作符
5. 可以改变字符串中的某一个字符。 如

string myString = "hello"; mystring[0] = 'l'; 

这中操作是允许的。

三、C风格字符串

字符串字面值的类型实质是const char类型的数组。C++从C语言继承下来的一种通用结构是C风格字符串,而字符串字面值就是该类型的实例。C风格字符串是以空字符null结束的字符数组:

char ca1[]={'C', '+', '+'}; // no null, not C-style string
char ca2[]={'C', '+', '+', '\0'}; // explicit null
char ca3[]="C++"; // null terminator added automatically
const char *cp="C++"; // null terminator added automatically
char *cp1=ca1; // points to first element of a array, but not C-style string
char *cp2=ca2; // points to first element of a null-terminated char array

ca1和cp1都不是C风格字符串:ca1是一个不带结束符null的字符数组,而指针cp1指向ca1,因此,它指向的并不是以null结束的数组。

2.1 C风格字符串的使用

C++语言通过(const) char *类型的指针来操纵C风格字符串。

const char *cp = "some value"; // 一个C风格字符串
while(*cp) //判断cp当前指向的字符是true还是false,true表明这是除null外的任意字符
{
// do something to *cp
++cp;
}

2.2 C风格字符串的标准库函数

复制代码
#include <cstring> // cstring是string.h头文件中的C++版本,而string.h是C语言提供的标准库

//操纵C风格字符串的标准库函数(参数类型省略,都是char *类型):
strlen(s) // 返回s的长度,不包括字符串结束符null
strcmp(s1, s2) //当s1<s2时,返回值<0 ,当s1=s2时,返回值=0 ,当s1>s2时,返回值>0
strcat(s1, s2) // 将字符串s2连接到s1后,并返回s1
strcpy(s1, s2) // 将s2复制给s1,并返回s1
strncat(s1, s2, n) // 将s2的前n个字符连接到s1后面,并返回s1
strncpy(s1, s2, n) // 将s2的前n个字符复制给s1,并返回s1
if(cp1 < cp2) // compares address, not the values pointed to
const char *cp1 = "A string example";
const char *cp2 = "A different string";
int i=strcmp(cp1, cp2); // i is positive
i=strcmp(cp2, cp1); // i is negative
i=strcmp(cp1, cp1); // i is zero
复制代码

 

2.3 永远不要忘记字符串结束符null

char ca[]={'C', '+', '+'}; // not null-terminated
cout << strlen(ca) << endl; // disaster: ca isn't null-terminated



2.4 调用者必须确保目标字符串具有足够的大小

复制代码
// Dangerous:What happens if we miscalculate the size of largeStr?
char largeStr[16+18+2]; // will hold cp1 a space and cp2
strcpy(largeStr, cp1); // copies cp1 into largeStr
strcat(largeStr, " "); // adds a space at end of largeStr
strcat(largeStr, cp2); // concatenates cp2 to largeStr
// prints A string example A different string
cout << largeStr << endl;
复制代码

 

2.5 使用strn函数处理C风格字符串

char largeStr[16+18+2] // to hold cp1 a space and cp2
strncpy(largeStr, cp1, 17); // size to copy includes the null
strncat(largeStr, " ", 2); // pedantic, but a good habit
strncat(largeStr, cp2, 19); // adds at most 18 characters, plus a null

 

2.6 尽可能使用标准库类型string

string largeStr = cp1; // initialize largeStr as a copy of cp1
largeStr += " "; // add space at end of largeStr
largeStr += cp2; // concatenate cp2 onto end of largeStr

此时,标准库负责处理所有的内在管理问题。

Android系统编译之Communication error with Jack server (35), try ‘jack-diagnose‘ or see Jack server log jack server failed场景个人分析网上分析分析1分析2原因1:权限问题原因2:端口占用原因3:删除 TLSv1, TLSv1.1测试结论解决方案说明相关链接 场景 在进行Android系统开发时,在liunx编译时发生问题,描述如下: ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper 阅读详情

相关推荐

建议收藏:模拟版图高频面试题,直通面试,Offer抢先拿!

直击模拟版图面试

nuoweishizi的博客 6337

字符串字面值总结

总结了c语言中字符串的相关知识点

azhibihuamulan的博客 2436

300个fpga练手项目推荐

• 按键设置BPM,LED和蜂鸣器同步打拍(支持4/4、3/4拍)• 例:先实现DDR3控制器(基础),再构建视频处理流水线(集成)◦ 驱动小型e-Paper显示日期/时间(SPI接口,静态刷新)◦ 音频输入经FFT后,用LED柱状显示频率能量(8频段简化)◦ 通过HC-05模块接收手机指令,控制电机方向(前进/后退)• 随机点亮LED,用按钮响应,数码管显示反应时间(毫秒级)• 8个LED旋转闪烁,按钮停止后显示中奖编号(带减速动画)• 用4方向按键输入手势(如→→←↑),正确后点亮绿色LED。

qq_62784677的博客 7641

http://www.cnblogs.com/coveted/archive/2011/12/28/2304509.html

http://www.cnblogs.com/coveted/archive/2011/12/28/2304509.html 一、字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。 字符串没有变量名字,自身表示自身 "Hello World!" /

xiaocaichonga的专栏 1560

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1005

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置

本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。

weixin_29175469的博客 271

c语言字符串字面值定义,C++基本类型(内置类型)与字面值常量详解

一、基本类型C++11标准定义了包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于特殊的场合。例如最常用的,当函数不返回任何值时使用空类型(void)作为返回类型。类型含义最小尺寸bool布尔类型未定义,只有true和false两值char字符类型8bitwchar_t宽字符16bitc...

weixin_39921504的博客 1269

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4247

字符串--字符串字面量、字符串的存储

一个字符串可以存于字符数组中,但一个字符型数组中存储的并非一定是一个字符串,这要看它的最后一个元素是否为’\0’ ,字符数组是由字符构成的数组,仅当其最后一个元素为’\0’ 时才表示字符串。按这种方式定义和初始化数组,不必指定数组地大小,也不必单独为数组中地每个元素进行初始化,编译系统会根据字符串中字符地个数来确定数组地大小,由于字符串字符量“Hello”地末尾字符是’\0’ ,因此数组的大小为字符串中实际字符地个数加1。通常,将一个字符串存放在一维字符数组中,将多个字符串存放在二维字符数组中。

ww1425408527的博客 4135

基于Active-HDL的HDL设计录入与仿真

作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&amp;wvr=6&amp;is_all=1 GitHub:github.com/saint-000 优快云: https://me.youkuaiyun.com/qq_4053...

一个会写代码的烤鸭 7782

实战解析:利用Wireshark解密QQ通信协议

本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。

weixin_29210727的博客 408

字符串字面值

字符串字面值的类型就是const char类型的数组。 标准库函数strlen用于计算C风格字符串的字符个数,不包括null结束符。 一、字符字面值 字符字面值: 'A' //single quote:character literal 字符串字面值: "A" //double quote:character string literal.包含字母A和空字符的字符串 1.stri

站在理想与平凡的路口 2079

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1665

字符串字面值、C风格字符串、C++风格字符串 一、字符串字面值

字符串字面值、C风格字符串、C++风格字符串 一、字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。 字符串没有变量名字,自身表示自身 "Hello World!" //simple string literal "" //empty string

Stroller 746

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

c风格字符串,字符串字面值,c++字符串

C风格字符串:本质上就是以空字符null为结束符的数组 可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组 字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示。 C++字符串:通俗而言是string类,为和c语言兼容,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。(实际上在c++中,string最好直接理解为一个基本类型,相...

weixin_34289454的博客 143

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C风格字符串,字符串字面值,C++风格字符串

一、字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。 字符串没有变量名字,自身表示自身 "Hello World!" //simple string literal"" //empty string literal"\nCC\toptions\tfile.[cC]

ybw1085075003的专栏 676

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

总结 关于C风格字符串

1.字符串字面值     字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符    "Hello World!" //simple string literal

记录我即将到来的一年 977

c字符串、string对象、字符串字面值的区别

一、字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。 字符串没有变量名字,自身表示自身 "Hello World!" //simple string literal"" //empty string literal"\nCC\toptions\tfile.[c

sky_clara的专栏 5215

c语言中字符串字面值属于,c字符串,string对象,字符串字面值的区别详解

一、字符串字面值字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。字符串没有变量名字,自身表示自身"Hello World!" //simple string literal"" //empty string literal"\nCC\toptions\tfile.[cC]\n" //stri...

weixin_33456452的博客 501

c 风格字符串总结

开始转载之前,我先补充两点 a str  strn 类函数 是c语言风格的操作,所以在里面用到的必须位字符串面值 b “+”这个操作符号,左右两边必须一个要为string,否则将报错。这是因为 + 操作符在重写的时候,要求的是string类型,如果两个都是字符串常量则无法转换为string类型了      eg               string s1 = "hello";

zhaowenchaofang的专栏 1366

C风格字符串

一、字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。 "Hello World!" //simple string literal

1077

C风格字符串 C++string对象 字符串常量 字符串直接量

最大的区别就是C风格的字符串是静态的,不可以动态变化,使用极为麻烦。 而C++的std::string类型动态管理,非常方便。 C风格字符串和char数组是不一样的,看下面两种定义: char carr1 = {'a', 'b', 'c'}; char carr2 = {'a', 'b', 'c', '\0'}; 看上面,carr2可以说成是C风格字符串,carr1就不是C风格字符串

2> /dev/null 3463
上一篇: javascript控制页面控件隐藏显示的两种方法
下一篇: GNU编译优化级别-O -O1 -O2 -O3
程序员悟空
博客等级 码龄18年 65粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值