C语言编译时程序出现错误,可能是数组越界,堆栈溢出(比如递归调用层次太多引起)?

题目 对输入的字符串进行排序后输出
输入 第一行n,第二行n个字符串,字符串之间用空格隔开
输出 一行排序后的字符串

#include <stdio.h>
#include <string.h>
int main() {
    int num;
    scanf("%d",&num);
    char a[10];
    for(int i=0;i<num;i++){
        scanf("%s",&a[i]);       //输入数组
    }
    for(int i=0;i<num;i++){
        for(int j=i+1;j<num;j++){
            char s;
            if(strcmp(a[i],a[j])>0){
                strcpy(s, a[i]);
                strcpy(a[i], a[j]);
                strcpy(a[j], s);
            }
        }
    }

    for(int i=0;i<num;i++){
        printf("%s",a[i]);    //输出数组
    }
    return 0;
}


我这代码好繁琐,但是逻辑是对的吧,我觉得。

看了别人的代码,真精简

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    int n;
    scanf("%d",&n);
    char a[n][100];
    int num=0;
    
    while(scanf("%s",&a[num])!=EOF){
    num++;
    }//先全部输入完再进行排序
    qsort(a,n,sizeof(a[0]),strcmp);
        for(int i=0;i<n;i++){
        printf("%s ",a[i]);
        }
    
    return 0;
}

原来库里有这个函数啊

我还是想知道我错在了哪?

改动处见注释,供参考:

#include <stdio.h>
#include <string.h>
int main() {
    int num;
    scanf("%d",&num);
    char a[20][64]; //修改 char a[10];
    for(int i=0;i<num;i++){
        scanf("%s",a[i]); //修改
        //scanf("%s",&a[i]);
    }
    for(int i=0;i<num - 1;i++){//for(int i=0;i<num;i++)
        for(int j=i+1;j<num;j++){
            char s[64];    // char s; 修改
            if(strcmp(a[i],a[j])>0){
                strcpy(s, a[i]);
                strcpy(a[i], a[j]);
                strcpy(a[j], s);
            }
        }
    }
    for(int i=0;i<num;i++){
        printf("%s ",a[i]);//输出数组  修改
    }
    return 0;
}

char s;?
这个长度不够
char s[100];

char a[10];
这个也不对,是char a[10][100];