如何使用指针将字符数组中的元素分类到另外两个数组?

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

出现错误:SIGSEGV

问题相关代码,请勿粘贴截图
#include<stdio.h>
int main(){
    int i;
    char a[10]={0},b[10]={0},c[20];
        scanf("%s",c);
    char *n=a;
    char *m=b;
    char *p=c;
    for(;*p!='\0';p++){
        if(*p='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'){
            *n=*p;
            n++;
        }else{
            *m=*p;
            m++;
        }
    }
    for(i=0;a[i]!='\0';i++){
        printf("%s",a[i]);
    }
    for(i=0;b[i]!=('\0');i++){
        printf("%s",b[i]);
    }
    return 0; 
}


运行结果及报错内容

报错:Program received signal SIGSEGV,Segmentation fault

我的解答思路和尝试过的方法
我想要达到的结果

将c[20]中的数字放到数组a中,将c[20]中的字母放到数组b中

if(*p='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')这里不能这么写,改成

if( *p >='0' && *p <='9')

a和b数组中你都没有赋值\0,所以下面的for循环也是错误的;
输出单个字符用%c,不是%s

代码修改如下:

#include<stdio.h>
int main(){
    int i;
    char a[10]={0},b[10]={0},c[20];
    scanf("%s",c);
    char *n=a;
    char *m=b;
    char *p=c;
    for(;*p!='\0';p++){
        if(*p>='0' && *p<='9'){  //修改1
            *n=*p;
            n++;
        }else{
            *m=*p;
            m++;
        }
    }
    //修改2,设置\0
    *m='\0';
    *n = '\0';



    for(i=0;a[i]!='\0';i++){
        printf("%c",a[i]); //修改3 %s改成%c
    }
    for(i=0;b[i]!=('\0');i++){
        printf("%c",b[i]); //修改3 %s改成%c
    }
    return 0; 
}