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.pswp.cn/news/533313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533313.shtml
英文地址,請注明出處:http://en.pswp.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相關操…