strcpy_s或者strcat_s()的问题

这个代码VS2019写的,编译时没问题,运行出问题。问题出在哪里?
源代码如下:
#include
#include
#include
#include
#define STUNUM 1000
struct Stu {
long stu_num;
char* name[1];
char sex;
int age;
char* depa[1];
};
void set();
int main() {
int dis;
set();//建立基础信息
return 0;
}
void set() {
srand((unsigned)time(NULL));
struct Stu st[STUNUM];
int i;
const char* sur[15] = { "秦", "刘", "赵", "田", "韩", "曹", "孙", "唐", "杨", "朱", "毛", "邓", "诸葛", "公孙", "东方" };//15
const char* name[20] = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "万", "千", "天", "丕", "亮", "源", "雨", "伟", "东", "欢", "笑" };//20
for (i = 0; i < STUNUM; i++) {
char s[1][20];
st[i].name[0] = (char*)malloc(sizeof(char));
strcpy_s(s[0],strlen(sur[0])+1 ,sur[rand() % 15]);
strcat_s(s[0], 4 * sizeof(name[0]), name[rand() % 20]);
strcat_s(s[0], 4 * sizeof(name[0]), name[rand() % 20]);
strcat_s(st[i].name[0], 4 * sizeof(name[0]), s[0]);
printf("%s\n", st[i].name[0]);
free(st[i].name[0]);
}
}

这个问题是:使用未声明的标识符“strcat”