我正在尝试将块字符(█,U + 2588)存储在char变量中。
#include "stdio.h"
int main(void) {
char block = '█';
printf("Without storage: █\n");
printf("With storage: %c\n", block);
}
但它给了我警告
main.c: In function 'main':
main.c:4:20: warning: multi-character character constant [-Wmultichar]
char block = '█';
^~~~~
main.c:4:20: warning: overflow in implicit constant conversion [-Woverflow]
代码输出:
Without storage: █
With storage: �
'with storage'未知可能是由于char溢出而且仅代表该角色的一半。
我知道块字符可能是UTF-8 multichar,那么有人如何代表UTF-8 multichar而没有任何警告?
答案 0 :(得分:1)
这是一个广泛的角色,因此需要一个不同的类型。在这种情况下,wchar_t
是更好的选择,但仅此一项不会这样做,您需要将常量本身标记为宽字符。例如:
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
int main()
{
char c='A';
wchar_t wc=L'█';
printf("d%lcd d█d\n",wc);
puts("end");
exit(EXIT_SUCCESS);
}
宽字符常量的标记为L
(单个字符或字符串),并分别打印%lc
和%ls
。但仅凭这一点并没有为我做,第二个printf
仍然没有印刷。这是控制台本身的问题,设置区域设置有帮助(至少对我而言)
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <locale.h>
int main()
{
char c='A';
wchar_t wc=L'█';
setlocale(LC_CTYPE, "");
printf("%c d█d\n",c);
printf("d%lcd d█d\n",wc);
puts("end");
exit(EXIT_SUCCESS);
}