🎉 前言
省流:这不是正经的教学,纯属是作者弱智操作导致的乱码问题,绝不是是什么配置原因导致的。
🎉 问题描述
贴一下我写的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语言去了。