C语言嵌入SQL语言编程,语句执行到#sql3 = strcat((char *)sql2,str2)#无法再执行下去

问题遇到的现象和发生背景

C语言嵌入SQL语言编程,语句执行到#sql3 = strcat((char *)sql2,str2)#无法再执行下去

用代码块功能插入代码,请勿粘贴截图
//教师查看自己所教课程的学生和成绩;
int search1()
{
    ret = SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); //申请环境句柄
    ret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
    ret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); //申请数据库连接句柄
 
    ret=SQLConnect(hdbc,(SQLCHAR*)"stu",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"123456",SQL_NTS);
    /*第2个参数为配置的ODBC数据源名称,这里根据自己的配置进行修改*/
    if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO))
    {
        printf("连接数据库失败!");
        return -1;
    }
    int ch;
    char *cname; 
    printf("请输入你要查看的课程名称:\n") ;
    scanf("%s",&cname);    
    
    ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); /*执行sql语句*/
    SQLCHAR sql1[]="use student2022";
    SQLCHAR sql2[]="SELECT Reports.Sno,Grade FROM Reports LEFT JOIN Courses ON Reports.Cno=Courses.Cno WHERE Courses.Cname=";
    SQLCHAR str1[]=" ORDER BY Grade DESC,Sno";
    char *sql3;
    char *str2="'"; 
    printf("text\n"); /*无法执行以下代码*/
    sql3 = strcat((char *)sql2,str2); 
    sql3 = strcat(sql3,cname); 
    sql3 = strcat(sql3,str2); 
    sql3 = strcat(sql3,(char *)str1);
    printf("%s\n",sql3);
    
    ret=SQLExecDirect(hstmt,sql1,SQL_NTS);
    ret=SQLExecDirect(hstmt,(SQLCHAR *)sql3,SQL_NTS);
    
    printf("这学期该门课程的所有学生成绩:\n");
    printf("学生学号\t\t\t课程名称\t\t\t\t成绩\n"); 
    
    if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
    {
        SQLCHAR str1[50],str2[50],str3[50];//str5[50],str6[50];
        SQLINTEGER len_str1, len_str2, len_str3;
        while(SQLFetch(hstmt)!=SQL_NO_DATA)
        {
            SQLGetData(hstmt,1,SQL_C_CHAR,str1,50,&len_str1);   //获取第一列数据
            SQLGetData(hstmt,2,SQL_C_CHAR,str2,50,&len_str2); 
            SQLGetData(hstmt,3,SQL_C_CHAR,str3,50,&len_str3); 
            //SQLGetData(hstmt,4,SQL_C_CHAR,str4,50,&len_str4); 
            //SQLGetData(hstmt,5,SQL_C_CHAR,str5,50,&len_str5); 
            //SQLGetData(hstmt,6,SQL_C_CHAR,str6,50,&len_str6); 
            printf("%s        \t\t%s    %s\n", str1, str2,str3);//,str4);//, str5);
        }
    }
 
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
    SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
    return 0;    
}

运行结果及报错内容

请输入你要查看的课程名称:
数据结构
text


Process exited after 8.11 seconds with return value 3221225477
请按任意键继续. . .

sql2数组大小不够用