当前位置: 首页 > article >正文

VScode C语言中文乱码问题解决

🎉 前言

省流:这不是正经的教学,纯属是作者弱智操作导致的乱码问题,绝不是是什么配置原因导致的。

🎉 问题描述

贴一下我写的C语言代码(太久没写了,最近学数据结构才拾起来)

#include <stdio.h>
#include<string.h>
#define MAXSIZE 100
typedef struct 
{
   char no[20];
   char name[50];
   float price;
}Book;

typedef struct{
    Book *elem;
    int length;
}SqList;

int InitList(SqList *L);

int main()
{

    SqList L;
    InitList(&L);
    printf("%s",L.elem[0].name);
}

int InitList(SqList *L)
{
    Book a[100];
    strncpy(a[0].no,"114514",7);//多出一个长度是用于存储字符串末尾的空字�?
    strncpy(a[0].name,"红楼梦",4);
    a[0].name[sizeof(a[0].name) - 1] = '\0'; // 手动添加空字符
    a[0].price = 100;
    L->elem = a;
    if(!L->elem){
        return -1;
    }
    L->length = 0;
    return 0;
}

在主函数中我想要打印出第一本书名,也就是“红楼梦”,但是终端却输出:红�SW�% ,心肺骤停!

我一开始还以为编码有问题,但后来改成GBK还是存在这个问题。
这是我不知是哪根筋松动了,注意到strncpy(a[0].name,“红楼梦”,4); 这一句,出于本能反应,我将4改成了一个较大的数——10.
再运行一下,乱码消失了,amazing!

此时我恍然大悟,哦,对哟,C语言中一个中文字符好像占两个字符,我用4个存储空间肯定存不下“红楼梦”(加上’\0’)这三个字啊,不说了,羞死了,赶紧去学C语言去了。


http://www.kler.cn/a/322161.html

相关文章:

  • 【HarmonyOS】组件长截屏方案
  • 【嵌入式开发】有关16head(16接口点击器)相关的资料
  • Java17-Sealed Classes(密封类)
  • 电信光猫破解记录
  • SprintBoot 中动态扩展 MongoDB 数据库字段,怎么创建实体类?
  • Axios 封装网络请求
  • 总结拓展十一:S4 HANA和ECC区别
  • 进阶 RocketMQ - 消息存储-一张图掌握核心要点
  • 数字化转型:开启未来发展新引擎
  • Vue可视化大屏模板
  • 服务器的地址如何伪装起来
  • Spring Boot 学习之路 -- 基础认知
  • 触发器对象
  • 计算机的历史,你可知道?
  • 连接池和长连接的区别和优缺点
  • 【VUE】状态管理:Pinia组件、Cookie组件
  • 基于单片机巡迹避障智能小车系统
  • 缓存与数据库如何保持一致及MySQL和Redis的使用场景以及区别
  • 1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)
  • Animal objDog = new Dog()和 Dog objDog = new Dog()的区别