二维汉字数组输出错误内容

尝试着在41个汉字中随机选出七个输出且不重复,程序在多次运行中,会有一定概率出现41个汉字之外的汉字,初步分析为汉字边界混在一起了,但不知具体该怎么修正,请按照我的程序思路解答。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void qiyan(char *i);
void wuyan(char *i);
int main()
{
int x=0,y=0,z=0,*j=&z,*n=&y;
char a[41][4]={ "叶","荷","梅","柳","花","日","月","光","湖",
"河","海","江","山","岭","二","两","千","万",
"春","秋","夏","冬","霜","雪","东","西","窗",
"知","落","含","相","和","多","少","红","明",
"碧","绿","枯","肥","瘦"};
char *i=&a;
srand((unsigned) time(NULL));
printf("七言诗句诗:");
qiyan(i);
}

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void qiyan(char i)
{
int m=0,x,b=0;
char Head = i;
int e;
for(b=0;b<7;b++)
{
x=rand()%(40-b+1);
printf("%s",&
(i+x
4));
e=
(i+(40-b)*4);
(i+(40-b)4)=(i+x4);
(i+x4)=e;
}
printf("\n");
}