所以我有一个变量char c
,我想将'å'
分配给。如果我尝试c = 'å'
,我会在终端收到一条警告:warning: multi-character character constant [-Wmultichar]
'æ'
,'ø'
或'å'
分配给char c
?答案 0 :(得分:3)
什么是多字符常量?
这表示您的文本编辑器使用多个字节在源代码文件中存储字符,可能是因为它将其保存为UTF-8编码的Unicode字符。由于char
只能容纳一个字节,因此您的编译器会告诉您此分配不会产生预期的效果,因为您尝试将多字节文字存储到只能容纳一个字节的变量中。
如何将
'æ'
,'ø'
或'å'
分配给char c
?
这取决于多种因素。 char
可以存储0到255之间的值。 1 在ASCII中只定义0到127; 128到255仅在某些其他代码页中定义(例如,ISO-8859-1)。要在char
中存储其中一个字符,您必须执行以下操作:
-finput-charset=...
。)如果这三者中的任何一个不匹配,那么你可能会看到编译器警告或垃圾输出所在的字符。
您可以使用宽字符(wchar_t
)绕过大多数问题,这些字符通常足以存储任何Unicode代码点。您仍然必须确保文本编辑器和编译器对源中字符的编码达成一致,除非您使用\uNNNN
Unicode转义序列,它可以表示C源中的任何Unicode代码点代码只使用与ASCII兼容的字符(这意味着编译器不必被告知源代码所在的代码页)。
1 或-128至127; {C}标准未指定char
的默认签名,但由于我们正在讨论字符,因此我假设0到255是预期范围。
答案 1 :(得分:2)
多字符常量是文字int
,使用带有多个char
的字符 - 文字语法,并且具有实现定义的值。
避免使用它们,除非您确实需要它们,否则希望将代码与您的实现联系起来并知道它们能够满足您的需求。
即使这样,一个更安全,更不易出错的方法就是从int
明确地创建char
- 常量 - 文字和运算符。
即使您只看到一个字符,为什么会出现该错误?
因为角色对不同的人意味着不同的东西,取决于他们的情绪和月亮的阶段:
您当前的麻烦源于使用字符集,其中该符号不是单个C - char
,即UTF-8。
如果您坚持将它们分配给单个char
,请选择将它们作为单个字节的字符集
否则,请正确使用char
s。
BTW:使用wchar_t
可能会被用作创可贴,虽然UTF-16仍然可以使用多代码单元代码点(并且你更有可能在那里保留bug),甚至UTF -32具有多码点字形)。
答案 2 :(得分:1)
这些字符不在ASCII表中。 char
的大小为1个字节,但是这些字符的编码需要超过1个字节,因此编译器会向您发出警告。您可能必须使用wchar_t
类型并且特定于此类型函数。