出现错误: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;
}