c语言里字符串和字符串字面量,string literals(字符串字面量)

构造一个指定字符数组类型的未命名对象,用于需要在源代码中嵌入字符串时使用。

句法

" s-char-sequence "(1)u8 " s-char-sequence "(2)(since C11)

u " s-char-sequence "(3)(since C11)

U " s-char-sequence "(4)(since C11)

L " s-char-sequence "(5)

其中

S-炭序列-零个或多个字符,每个字符可以是源字符集中的多字节字符(不包括(“),\和换行符),也可以是字符转义,十六进制转义,八进制转义或统一字符名称(自C99开始)在转义序列中。

1)字符串文字:文字的类型是char[],数组中的每个字符都是使用执行字符集从s-char-sequence中的下一个字符初始化的。

2)UTF-8字符串文字:文字的类型是char[],数组中的每个字符都是使用UTF-8编码从s-char-sequence中的下一个多字节字符初始化的。

3)16位宽字符串文字:文字的类型是char16_t[],数组中的每个char16_t元素都被初始化,就好像通过mbrtoc16在实现定义的区域设置中执行一样。

4)32位宽的字符串文字:文字的类型是char32_t[],数组中的每个char32_t元素都被初始化,就好像通过mbrtoc32在实现定义的区域设置中执行一样。

5)宽字符串文字:文字的类型是wchar_t[],数组中的每个wchar_t元素被初始化,就好像通过mbstowcs在实现定义的区域设置中执行一样。

说明

首先,在翻译阶段6(宏扩展之后),将相邻的字符串文字(即仅由空白分隔的字符串文字)连接起来。

只有两个窄或两个宽字符串可以连接在一起。(直到C99)如果一个文字没有前缀,那么结果字符串文字的宽度/编码由前缀文字指定。如果两个字符串文字具有不同的编码前缀,则连接是实现定义的。L“Δx=%”PRId16 //在阶段4,PRId16在阶段6扩展为“d”// L“Δx=%”和“d”形成L“Δx=%d”(自C99以来)

其次,在翻译阶段7,将终止空字符添加到每个字符串文字中,然后每个文字初始化一个静态存储持续时间和长度的未命名数组,以便足以容纳字符串文字的内容加上一个空终止符。

char* p = "\x12" "3"; // creates a static char[3] array holding {'\x12', '3', '\0'}                       // sets p to point to the first element of the array

字符串文字是不可修改的(事实上可以放在只读存储器中.rodata)。如果程序试图修改由字符串文字形成的静态数组,则行为是不确定的。

char* p = "Hello";p[1] = 'M'; // Undefined behavior

对于相同的字符串文字来说,既不要求也不禁止在存储器中引用相同的位置。而且,重叠的字符串文字或者是其他字符串文字的子字符串的字符串文字可以组合。

"def" == 3+"abcdef"; // may be 1 or 0, implementation-defined

注意

字符串文字不一定是一个字符串; 如果字符串文字含有空字符,则表示包含多个字符串的数组:

char* p = "abc\0def"; // strlen(p) == 3, but the array has size 8

如果一个有效的十六进制数字在字符串文字中出现十六进制转义,它将无法编译为无效转义序列,但字符串连接可以用作解决方法:

//char* p = "\xfff"; // error: hex escape sequence out of rangechar* p = "\xff""f"; // okay, the literal is char[3] holding {'\xff', 'f', '\0'}

字符串文字可用于初始化数组,如果数组大小小于字符串文字的大小,则会忽略空终止符:

char a1[] = "abc"; // a1 is char[4] holding {'a', 'b', 'c', '\0'}char a2[4] = "abc"; // a2 is char[4] holding {'a', 'b', 'c', '\0'}char a3[3] = "abc"; // a3 is char[3] holding {'a', 'b', 'c'}

字符串文字(1)和宽字符串文字(5)的编码是实现定义的。例如,GCC与选择它们的命令行选项 -fexec-charset和-fwide-exec-charset。

#include #include #include #include #include int main(void){

char s1[] = "a猫?"; // or "a\u732B\U0001F34C"

char s2[] = u8"a猫?";

char16_t s3[] = u"a猫?";

char32_t s4[] = U"a猫?";

wchar_t s5[] = L"a猫?";

setlocale(LC_ALL, "en_US.utf8");    printf("  \"%s\" is a char[%zu] holding { ", s1, sizeof s1 / sizeof *s1);    for(size_t n = 0; n 

printf("%#x ", +(unsigned char)s1[n]); puts(" }");    printf("u8\"%s\" is a char[%zu] holding { ", s2, sizeof s2 / sizeof *s2);    for(size_t n = 0; n 

printf("%#x ", +(unsigned char)s2[n]); puts(" }");    printf(" u\"a猫?\" is a char16_t[%zu] holding { ", sizeof s3 / sizeof *s3);    for(size_t n = 0; n 

printf("%#x ", s3[n]); puts(" }");    printf(" U\"a猫?\" is a char32_t[%zu] holding { ", sizeof s4 / sizeof *s4);    for(size_t n = 0; n 

printf("%#x ", s4[n]); puts(" }");    printf(" L\"%ls\" is a wchar_t[%zu] holding { ", s5, sizeof s5 / sizeof *s5);    for(size_t n = 0; n 

printf("%#x ", s5[n]); puts(" }");}

可能的输出:

"a猫?" is a char[9] holding { 0x61 0xe7 0x8c 0xab 0xf0 0x9f 0x8d 0x8c 0  }u8"a猫?" is a char[9] holding { 0x61 0xe7 0x8c 0xab 0xf0 0x9f 0x8d 0x8c 0  }

u"a猫?" is a char16_t[5] holding { 0x61 0x732b 0xd83c 0xdf4c 0  }

U"a猫?" is a char32_t[4] holding { 0x61 0x732b 0x1f34c 0  }

L"a猫?" is a wchar_t[4] holding { 0x61 0x732b 0x1f34c 0  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 函数指针开销,函数指针是否使程序变慢?

AnT..82您可以看到,在从性能角度来看实际上很重要的情况下,例如在一个周期中多次重复调用该函数,性能可能根本不同.这对于人们来说可能听起来很奇怪,他们习惯于将C代码视为由抽象的C机器执行的,其机器语言与C语言本身密切相关.在这种情况下,"默认情况下"对函数的间接…

tms320c2000 c语言伪指令,TMS320F240XDSP汇编及C语言多功能控制应用(附光盘)

摘要:本书以SNF2407M实验开发系统配合CPLD的SNDSP2407P接口,以简易的C语言和快速的汇编语言编写达20个以上的范例实验及多个专题制作,主要内容如下:TMS320LF2407系列MCU的硬件架构,内存配置及指令格式和其运作功能;C2000的CC或CCS程序的编辑,编译及除错等操作;DSP搭…

用C语言编写绳索运动函数,福建省教师招聘考试小学数学真题试卷

2014年福建省中小学新任教师公开招聘考试小学数学试卷(课程代码09202)1. 本试卷满分150分,考试时间120分钟。2. 本试卷分为两部分:第一部分为选择题,第二部分为非选择题。3. 请把所有答案涂、写在答题卡上。不要错位、越界答题.一、单项选择题…

c语言 三个小球排排坐,关颖三个孩子排排坐 太萌啦

0关颖三个孩子排排坐 太萌啦2019-12-10 10:596月20日,关颖在微博上晒出三个孩子坐在垫子上的照片,配文:“Terrible two has officially started today. Happy happy birthday Phi Phi! 家庭乐趣其中一件事情 就是和小朋友不断的唱生日歌吹蜡烛…

大学生学C语言用什么笔记本电脑,有哪些适合大学生用的笔记本电脑

高考成绩公布之后又有一大波新大学生即将入学,笔记本电脑也将是大学生必不可少的一款电子数码产品,但是现在市面上电脑繁多,又有哪些比较不错的电脑适合新入学的大学生呢?惠普 HP Envy 13 (2019)现在,最适合学生的笔记…

android自带下拉阻尼动画,android 有阻尼下拉刷新列表的实现方法

本文将会介绍有阻尼下拉刷新列表的实现,先来看看效果预览:这是下拉状态:这是下拉松开手指后listView回滚到刷新状态时的样子:1. 如何调用虽然效果图看起来样子不太好看,主要是因为那个蓝色的背景对不对,没关…

android viewpager画廊,Android使用ViewPager实现画廊效果

按照国际惯例,先上效果图其实这跟普通的ViewPager原理都一样,需要改变的地方就是:1.增加滑进和滑出的动画效果2.缩小ViewPager的大小,给屏幕上留出上一张和下一张视图的空间布局文件:xmlns:android"http://schema…

excel 区间人数柱状图_Excel中,区间统计的3种技巧都不掌握,那就真的OUt了!

点击上方"Excel函数公式"免费订阅 Excel的最大功能在于数据的分析与处理,在数据分析和处理中,区间统计是非常广泛的,各位亲是怎么操作的呢?如果还不掌握,且看小编给大家带来的“区间统计”的3种应用技巧。一…

nova8pro能升级鸿蒙吗,华为将有48款产品可以升级到鸿蒙 2.0系统

网站Huawei Central最近报道称,将有48款产品可以升级到鸿蒙 2.0系统,包括华为及其子品牌Honor的智能手机,平板电脑和智能手表。 Huawei Central名单中有3款未发布的手机Huawei Nova 8和Nova 8 Pro,以及Honor V40。 它们将在推出时…

patran如何看屈曲因子_校准证书中的修正值、修正因子,你真的会用吗?

一些仪器设备校准回来会产生修正值/修正因子,然而很多实验室小伙伴们不懂得如何正确使用这些修正值/修正因子?为帮助广大实验室能规范正确地使用修正值/修正因子,小析姐 特为大家推送这篇文章~【概念】修正值:为修正某一测量器具的…

android 生成debug.keystore,android sdk 如何重新生成debug.keystore

1)首先你要确定你安装的JDK位置,Windows->Preferences->Java->Installed JREs,你可以看到是Jre的location,再在dos cmd模式下查看你当前系统的path是否已经包含了。如果没有包含添加到当前环境参数中。因为我们要用到的keytool命令在这个目录下呀。2)接下来…

已知a类被打包在packagea_2021考研干货:199管理类联考综合逻辑归纳习题(1)

199管理类联考综合中的逻辑,所占分值为60分。因此,备考2021考研199管综的考生们,需要在内容上面多下功夫复习。题目:小张夫妇想买套房子,经他一番挑选,目标锁定某座楼的3套房。已知:这三套房子中…

凯立德手机导航(家园版) v5.3 for android,凯立德手机导航(家园版)android平台

感谢您阅读凯立德手机导航产品下载安装教程,请根据以下步骤进行操作。下载安装过程完成后,您将体验到更为专业的凯立德导航服务。安装前请认真阅读以下文字:1、为了减少导航产品所占容量,本导航产品分主程序和地图数据两部分。下载…

android性能优化 掘金,Android性能优化之内存泄漏

内存泄漏:内存单元使用完成后未释放,未回收。理解强弱引用和gc垃圾回收机制后,会更好的理解内存泄漏问题。在目前的Android项目中,内存泄漏是无法避免的,在编写代码时要是否产生了内存泄漏。内存泄露中要注意对象、变量…

clocks_per_sec 时间不正确_你该拥有的不只是护肤品,还有正确护肤时间表

同样是护肤,为什么你的效果始终不如意?其实,不同的时间段,皮肤各司其职,都有着不同的“任务”和“状态”。快跟芭姐一起了解一下这份《皮肤时间表》,看看如何让护肤效果事半功倍吧!清洁是唤醒肌…

jdbc连接数据scanip_JDBC连接数据库的四种方式:DriverManager,DataSource,DBCP,C3P0

方法1:使用java.sql.DriverManager类驱动管理器类,用于管理所有注册的驱动程序。(注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。)常用的两…

HTML下拉菜单怎么做成横向,css导航条横向带下拉菜单

cssdiv导航下拉二级菜单竖排效果如何改为横排?,在“下一站”有三个二级竖排菜单,如何能变为横排?困扰了我一天了,让二级菜单变成一行,只需要在竖排的效果上,让二级菜单都浮动起来,这…

java移动端接口测试_使用java如何进行接口测试

关于接口测试, 我们之前介绍过很多方法了, 有postman, soapUI, Jmeter等, 他们各有优势和劣势, 今天和大家分享的是如何用java TestNG来实现接口测试.开始测试之前需要如下准备工作:1. IDE环境, Intellij 或者eclipse, 个人推荐使用Intellij.2. JKD1.8 以上3. Maven 环境 Maven…

html5折叠卡片,基于HTML5折叠卡片式下拉菜单代码

基于HTML5折叠卡片式下拉菜单代码。这是一款基于jQueryCSS3HTML5实现的下拉列表框特效代码。效果图如下:实现的代码。hmtl代码:爱编程爱编程 jQuery特效 CSS3特效 HTML5特效 音效下载 flash动画js代码:(function ($) {var cards $(.card-dro…

fastexcel读取excel追加写入sheet页_python笔记52:python操作excel

主要内容:小目标:掌握excel模块主要内容:excel相关模块,openpyxl安装使用如果看完这篇文章,你还是弄不明excel相关操作; 你来找我,我保证不打你,我给你发100的大红包。1. excel相关操…