C语言的一个问题,我这程序为啥不对

img
先输入一个数表示要输入的字符串的个数,然后让换行输入的多个字符串存到数组中,当字符串的个数达到后按照首字母顺序换行输出

char* str[N]没有申请空间,在scanf()前需要str[a] = (char*)malloc(N);
scanf("%s",str[a])
具体修改如下:

img
你自己根据上面该一下或者参考我写的。
代码修改如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 10000

int main()
{
    int num;
    int i,j;
    char* str[N] = {0};
    char tmp[N];
    int a = 0;
    printf("Please enter a positive integer not less than 5.\n");
    scanf("%d",&num);
    getchar(); //吸收回车符

    //输入num个字符串
    while(a < num)
    {
        str[a] = (char*)malloc(N);
        memset(str[a],0,N);
        scanf("%s",str[a]);
        a++;
    }

    //比较字符串
    for (i=0;i<num-1;i++)
    {
        for (j=0;j<num-1-i;j++)
        {
            if(strcmp(str[j],str[j+1]) > 0)
            {
                memset(tmp,0,N);
                strcpy(tmp,str[j]);
                memset(str[j],0,N);
                strcpy(str[j],str[j+1]);
                memset(str[j+1],0,N);
                strcpy(str[j+1],tmp);
            }
        }
    }
    
    //打印
    for (i=0;i<num;i++)
        printf("%s",str[i]);
    

    //释放空间
    for (i=0;i<num;i++)
        free(str[i]);
    return 0;
}