为什么输出会乱码点呀

img

img


是utf-8的,为什么输出有这个我就觉得非常奇怪下面凑字数手机就是就是男生女生手机

UTF8编码,一个汉字占3字节,char[]方式一次只操作一个字节,把汉字编码打乱了,很多都不再是汉字,所以输出乱码。需要一次操作3个字节,或者试试使用二维数组,一个汉字单独一维。
我给我改了一下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char kp[8][4] = {"三", "国", "杀", "洗", "牌", "测", "试", "。"};
    printf("原牌:");
    for (int i = 0; i < 8; i++) {
        kp[i][3] = '\0';
        printf("%s", kp[i]);
    }

    // 洗牌
    srand((unsigned)time(NULL));
    for (int k = 0; k < 8; k++) {
        int sj = rand() % 7;
        char z[4];
        strcpy(z, kp[k]);
        strcpy(kp[k], kp[sj]);
        strcpy(kp[sj], z);
    }

    printf("\n洗牌后:");
    for (int i = 0; i < 8; i++) {
        printf("%s", kp[i]);
    }
}

测试效果:
原牌:三国杀洗牌测试。
洗牌后:国洗。牌三杀试测

kp[8][5]不就行,给大点空间