我不明白对于C,是否每个字符串总是一个多字节字符串,这意味着它们被编码为多字节字符:
char s[] = "AAA";
char m[] = "X生";如果s不包含像m这样的扩展字符集的成员,那么它也是一个多字节字符串吗?
我对此表示怀疑,因为我阅读了libc手册中的以下内容:
string“通常指多字节字符串,而不是宽字符串。宽字符串是wchar_t类型的数组,对于多字节字符串,通常使用wchar_t *类型的指针。
因此,我不明白多字节是否被引用到宽字符串的编码方面的字符串(它们的编号)的字节。
发布于 2015-01-26 13:06:38
因此,C99标准草案 (C11看起来一样)定义多字节字符如下:
表示源或执行环境的扩展字符集成员的一个或多个字节的序列。
因此,多字节字符是扩展字符集的一部分,因此s不是由多字节字符组成的。
多字节字符在5.2.1.2节中进一步定义。
源字符集可以包含多字节字符,用于表示扩展字符集的成员。执行字符集还可以包含多字节字符,这些字符不必具有与源字符集相同的编码。对于这两组字符集,下列内容应适用:
发布于 2015-01-26 12:58:28
您可以很容易地尝试测试一个字符串有多少字节。如果我用以下代码在我的机器上编译它:
char s[] = "AAA";
char m[] = "X生";
printf("s: %d\n", sizeof(s));
printf("m: %d\n", sizeof(m));因此我会得到输出
s: 4
m: 5这意味着"s“不是多字节字符串,而是"m”。为了确保编译器/系统的行为方式相同,我只需要在您的系统上测试它。
https://stackoverflow.com/questions/28150386
复制相似问题