C语言给char数组赋值特殊制表符出现编译告警如何解决?
C语言UTF-8特殊边框字符赋值报错解决方案
问题原因
你使用的┃、┳这类边框字符属于UTF-8编码的多字节字符,单个字符占3字节,远大于C语言中char类型的1字节存储空间。用单引号包裹多字节字符时,C编译器会将其识别为int类型的多字符常量,赋值给1字节的char变量时自然会触发溢出警告和多字符常量警告。
解决方案
- 第一步:修改自定义类型定义,将存储单字符的char类型改为存储UTF-8字符串的
const char*类型 - 第二步:赋值时使用双引号包裹特殊字符,将其作为字符串常量赋值
- 第三步:打印时使用
%s格式符替换原来的%c格式符
修改后的代码示例
typedef int t_dice[5][2]; // 修改类型为存储字符串指针的数组 typedef const char* t_diceExtremite[5]; typedef const char* t_diceMiddle [5][2]; t_dice dice; t_diceExtremite styleDiceTop,styleDiceBottom; t_diceMiddle styleDiceMiddle; for(i=0 ; i<5 ; i++){ if(dice[i][1]==1){ // 用双引号包裹特殊字符,作为字符串赋值 styleDiceTop[i] = "┳"; styleDiceMiddle[i][0] = "┣"; styleDiceMiddle[i][1] = "┫"; styleDiceBottom[i] = "┻"; }else{ styleDiceTop[i] = "━"; styleDiceMiddle[i][0] = "┃"; styleDiceMiddle[i][1] = "┃"; styleDiceBottom[i] = "━"; } } // 打印示例:用%s输出,不需要加&取地址 // printf("%s", styleDiceTop[i]);
额外注意事项
- Ubuntu默认终端使用UTF-8编码,不需要额外调整编码配置即可正常显示这类特殊字符
- 如果需要兼容Windows控制台,需要额外调用接口设置控制台编码为UTF-8
内容的提问来源于stack exchange,提问作者Cheewy
相关产品推荐
相关产品推荐

