263 lines
30 KiB
HTML
263 lines
30 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>字符串字面量</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_string_literal skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">字符串字面量</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="c.html">c</a>‎ | <a href="c-language.html">language</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>原位构造指定字符数组类型的无名对象,在需要内嵌字符串到源代码中时使用。</p>
|
|
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">语法</span></h3>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>"</b></code> <span class="t-spar">串字符序列</span> <code><b>"</b></code></td>
|
|
<td>(1)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>u8"</b></code> <span class="t-spar">串字符序列</span> <code><b>"</b></code></td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-c11">(C11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>u"</b></code> <span class="t-spar">串字符序列</span> <code><b>"</b></code></td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-c11">(C11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>U"</b></code> <span class="t-spar">串字符序列</span> <code><b>"</b></code></td>
|
|
<td>(4)</td>
|
|
<td><span class="t-mark-rev t-since-c11">(C11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>L"</b></code> <span class="t-spar">串字符序列</span> <code><b>"</b></code></td>
|
|
<td>(5)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<p>其中</p>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td><span class="t-spar">串字符序列</span></td>
|
|
<td>-</td>
|
|
<td>零或多个字符,每个或为来自源字符集的多字节字符(不含 <code><b>"</b></code> 、 <code><b>\</b></code> 及换行符),或为<a href="c-language-escape.html">转义序列</a>中定义的字符转义、十六进制转义、八进制转义<span class="t-rev-inl t-since-c99"><span>或通用字符名</span> <span><span class="t-mark-rev t-since-c99">(C99 起)</span></span></span>。
|
|
<p><br /></p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> <i>字符串字面量</i>:字面量的类型为 <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span><span class="br0">[</span>N<span class="br0">]</span></span></span> ,其中 <code>N</code> 是以执行窄编码的编码单元数计的字符串的大小,包括空终止符。以执行字符集从 <span class="t-spar">串字符序列</span> 中的下个字符初始化数组的每个 <code>char</code> 元素。</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> <i>UTF-8 字符串字面量</i>:字面量的类型为 <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span><span class="br0">[</span>N<span class="br0">]</span></span></span> ,其中 <code>N</code> 是以 UTF-8 编码单元数计的字符串大小,包括空终止符。以 UTF-8 编码从 <span class="t-spar">串字符序列</span> 中的下个多字节字符初始化数组中的每个 <code>char</code> 元素。</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 16 位宽字符串字面量:字面量的类型为 <span class="t-c"><span class="mw-geshi c source-c">char16_t<span class="br0">[</span>N<span class="br0">]</span></span></span> ,其中 <code>N</code> 是以实现定义的 16 位编码(通常为 UTF-16 )的编码单元数计的字符串大小,包括空终止符。如同通过在实现定义的本地环境中执行 <span class="t-lc"><a href="c-string-multibyte-mbrtoc16.html">mbrtoc16</a></span> 初始化数组的每个 <code>char16_t</code> 元素。</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 32 位宽字符串字面量:字面量的类型为 <span class="t-c"><span class="mw-geshi c source-c">char32_t<span class="br0">[</span>N<span class="br0">]</span></span></span> ,其中 <code>N</code> 是以实现定义的 32 位编码(通常为 UTF-32 )的编码单元数计的字符串大小,包括空终止符。如同通过在实现定义的本地环境中执行 <span class="t-lc"><a href="c-string-multibyte-mbrtoc32.html">mbrtoc32</a></span> 初始化数组的每个 <code>char32_t</code> 元素。</div>
|
|
<div class="t-li1"><span class="t-li">5)</span> 宽字符串字面量:字面量的类型为 <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">wchar_t</span><span class="br0">[</span>N<span class="br0">]</span></span></span> ,其中 <code>N</code> 是以执行宽编码的编码单元数计的字符串大小,包括空终止符。如同通过在实现定义的本地环境中执行 <span class="t-lc"><a href="c-string-multibyte-mbstowcs.html">mbstowcs</a></span> 初始化数组的每个 <code>wchar_t</code> 元素。</div>
|
|
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">解释</span></h3>
|
|
<p>首先,在<a href="c-language-translation_phases.html">翻译阶段 6</a> (宏展开后),连接相邻的字符串字面量(即仅为空白符所分隔的字符串字面量)。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-until-c99">
|
|
<td>
|
|
<p>仅可连接二个窄或二个宽字符串字面量。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-until-c99">(C99 前)</span></td>
|
|
</tr>
|
|
<tr class="t-rev t-since-c99">
|
|
<td>
|
|
<p>若一个字面量无前缀,则结果字符串字面量拥有有前缀字面量所指定的宽度/编码。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1">L<span class="st0">"Δx = %"</span> <a href="c-types-integer.html"><span class="kw177">PRId16</span></a> <span class="co1">// 在阶段 4 , PRId16 展开成 "d"</span>
|
|
<span class="co1">// 在阶段 6 , L"Δx = %" 和 "d" 组成 L"Δx = %d"</span></pre></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-c99">(C99 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-c11 t-until-c23">
|
|
<td>
|
|
<p>若二个字符串字面量拥有不同的编码前缀,则连接是实现定义的,除了不能连接 UTF-8 字符串字面量和宽字符串字面量。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-c11">(C11 起)</span><br />
|
|
<span class="t-mark-rev t-until-c23">(C23 前)</span></td>
|
|
</tr>
|
|
<tr class="t-rev t-since-c23">
|
|
<td>
|
|
<p>若二个字符串字面量拥有不同的编码前缀,则连接为非良构。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-c23">(C23 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>其次,在<a href="c-language-translation_phases.html">翻译阶段 7</a> ,添加空终止字符到每个字符串字面量,然后每个字符串字面量初始化一个拥有静态<a href="c-language-storage_duration.html">存储期</a>,长度刚好能容纳字符串字面量的内容加一个空终止符的无名数组。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="kw4">char</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="st0">"<span class="es2">\x12</span>"</span> <span class="st0">"3"</span><span class="sy4">;</span> <span class="co1">// 创建 static char[3] 数组,保有 {'\x12', '3', '\0'} </span>
|
|
<span class="co1">// 设置 p 指向数组的首元素</span></pre></div>
|
|
</div>
|
|
<p>字符串字面量<b>不可修改</b>(而且实际上可以放在例如 <code>.rodata</code> 的只读内存中)。若程序试图修改字符串字面量组成的静态数组,则行为未定义。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="kw4">char</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="st0">"Hello"</span><span class="sy4">;</span>
|
|
p<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">'M'</span><span class="sy4">;</span> <span class="co1">// 未定义行为</span>
|
|
<span class="kw4">char</span> a<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">"Hello"</span><span class="sy4">;</span>
|
|
a<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">'M'</span><span class="sy4">;</span> <span class="co1">// OK : a 不是字符串字面量</span></pre></div>
|
|
</div>
|
|
<p>既不要求亦不禁止等同的字符串字面量指代内存中的同一位置。而且,重叠的字符串字面量或作为其他字符串字面量子串的字符串字面量可以结合。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="st0">"def"</span> <span class="sy1">==</span> <span class="nu0">3</span><span class="sy2">+</span><span class="st0">"abcdef"</span><span class="sy4">;</span> <span class="co1">// 可为 1 或 0 ,实现定义</span></pre></div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>字符串字面量不必是一条字符串;若字符串字面量拥有内嵌的空字符,则它表示含有多于一条字符串的数组:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="kw4">char</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="st0">"abc<span class="es5">\0</span>def"</span><span class="sy4">;</span> <span class="co1">// strlen(p) == 3 ,但数组大小为 8</span></pre></div>
|
|
</div>
|
|
<p>若在字符串字面量中合法十六进制数位后随十六进制转义,则这会作为非法的转义序列导致编译失败,但能以字符串连接为变通方式:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="co1">//char* p = "\xfff"; // 错误:十六进制转义在范围外</span>
|
|
<span class="kw4">char</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="st0">"<span class="es2">\xff</span>"</span><span class="st0">"f"</span><span class="sy4">;</span> <span class="co1">// OK :字面量为 char[3] ,保有 {'\xff', 'f', '\0'}</span></pre></div>
|
|
</div>
|
|
<p>字符串字面量能用于<a href="c-language-array_initialization.html">初始化数组</a>,而若数组大小比字符串字面量大小少一,则忽略空终止符:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="kw4">char</span> a1<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">"abc"</span><span class="sy4">;</span> <span class="co1">// a1 为 char[4] ,保有 {'a', 'b', 'c', '\0'}</span>
|
|
<span class="kw4">char</span> a2<span class="br0">[</span><span class="nu0">4</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">"abc"</span><span class="sy4">;</span> <span class="co1">// a2 为 char[4] ,保有 {'a', 'b', 'c', '\0'}</span>
|
|
<span class="kw4">char</span> a3<span class="br0">[</span><span class="nu0">3</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">"abc"</span><span class="sy4">;</span> <span class="co1">// a3 为 char[3] ,保有 {'a', 'b', 'c'}</span></pre></div>
|
|
</div>
|
|
<p>字符串字面量 <span class="t-v">(1)</span> 和宽字符串字面量 <span class="t-v">(5)</span> 的编码是实现定义的。例如, gcc 用<a rel="nofollow" class="external text" href="https://gcc.gnu.org/onlinedocs/cpp/Invocation.html">命令行选项</a> <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">-</span>fexec<span class="sy2">-</span>charset</span></span> 和 <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">-</span>fwide<span class="sy2">-</span>exec<span class="sy2">-</span>charset</span></span> 选择它们。</p>
|
|
<p>尽管 C11 中允许混合的宽字符串字面量连接,几乎所有编译器都拒绝这种连接(仅有的已知例外是 <a rel="nofollow" class="external text" href="http://sdcc.sourceforge.net/">SDCC</a> ),而其使用经验是未知的。作为结果, C23 中移除了对混合宽字符串字面量连接的允许。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="co2">#include <stdio.h></span>
|
|
<span class="co2">#include <stdlib.h></span>
|
|
<span class="co2">#include <stddef.h></span>
|
|
<span class="co2">#include <uchar.h></span>
|
|
<span class="co2">#include <locale.h></span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw4">char</span> s1<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="st0">"a猫🍌"</span><span class="sy4">;</span> <span class="co1">// 或 "a\u732B\U0001F34C"</span>
|
|
<span class="kw4">char</span> s2<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> u8<span class="st0">"a猫🍌"</span><span class="sy4">;</span>
|
|
char16_t s3<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> u<span class="st0">"a猫🍌"</span><span class="sy4">;</span>
|
|
char32_t s4<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> U<span class="st0">"a猫🍌"</span><span class="sy4">;</span>
|
|
<span class="kw4">wchar_t</span> s5<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> L<span class="st0">"a猫🍌"</span><span class="sy4">;</span>
|
|
|
|
<a href="c-locale-setlocale.html"><span class="kw901">setlocale</span></a><span class="br0">(</span><a href="c-locale-LC_categories.html"><span class="kw904">LC_ALL</span></a>, <span class="st0">"en_US.utf8"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">" <span class="es1">\"</span>%s<span class="es1">\"</span> is a char[%zu] holding { "</span>, s1, <span class="kw4">sizeof</span> s1 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s1<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">for</span><span class="br0">(</span><a href="c-types-size_t.html"><span class="kw100">size_t</span></a> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1"><</span> <span class="kw4">sizeof</span> s1 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s1<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%#x "</span>, <span class="sy2">+</span><span class="br0">(</span><span class="kw4">unsigned</span> <span class="kw4">char</span><span class="br0">)</span>s1<span class="br0">[</span>n<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">" }"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"u8<span class="es1">\"</span>%s<span class="es1">\"</span> is a char[%zu] holding { "</span>, s2, <span class="kw4">sizeof</span> s2 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s2<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">for</span><span class="br0">(</span><a href="c-types-size_t.html"><span class="kw100">size_t</span></a> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1"><</span> <span class="kw4">sizeof</span> s2 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s2<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%#x "</span>, <span class="sy2">+</span><span class="br0">(</span><span class="kw4">unsigned</span> <span class="kw4">char</span><span class="br0">)</span>s2<span class="br0">[</span>n<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">" }"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">" u<span class="es1">\"</span>a猫🍌<span class="es1">\"</span> is a char16_t[%zu] holding { "</span>, <span class="kw4">sizeof</span> s3 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s3<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">for</span><span class="br0">(</span><a href="c-types-size_t.html"><span class="kw100">size_t</span></a> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1"><</span> <span class="kw4">sizeof</span> s3 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s3<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%#x "</span>, s3<span class="br0">[</span>n<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">" }"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">" U<span class="es1">\"</span>a猫🍌<span class="es1">\"</span> is a char32_t[%zu] holding { "</span>, <span class="kw4">sizeof</span> s4 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s4<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">for</span><span class="br0">(</span><a href="c-types-size_t.html"><span class="kw100">size_t</span></a> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1"><</span> <span class="kw4">sizeof</span> s4 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s4<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%#x "</span>, s4<span class="br0">[</span>n<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">" }"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">" L<span class="es1">\"</span>%ls<span class="es1">\"</span> is a wchar_t[%zu] holding { "</span>, s5, <span class="kw4">sizeof</span> s5 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s5<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">for</span><span class="br0">(</span><a href="c-types-size_t.html"><span class="kw100">size_t</span></a> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1"><</span> <span class="kw4">sizeof</span> s5 <span class="sy2">/</span> <span class="kw4">sizeof</span> <span class="sy2">*</span>s5<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%#x "</span>, <span class="br0">(</span><span class="kw4">unsigned</span><span class="br0">)</span>s5<span class="br0">[</span>n<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">" }"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>可能的输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">"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 }</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">引用</span></h3>
|
|
<div class="t-ref-std-17">
|
|
<ul>
|
|
<li>C17 标准(ISO/IEC 9899:2018):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.5 String literals (p: 50-52)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-11">
|
|
<ul>
|
|
<li>C11 标准(ISO/IEC 9899:2011):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.5 String literals (p: 70-72)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c99">
|
|
<ul>
|
|
<li>C99 标准(ISO/IEC 9899:1999):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.5 String literals (p: 62-63)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c89">
|
|
<ul>
|
|
<li>C89/C90 标准(ISO/IEC 9899:1990):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>3.1.4 String literals</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|