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]不就行,给大点空间