因为在剔除星号以外的字符时,a++了,所以里面的a[k++]的a地址不再是字符串起始地址,所以导致错误。
如果遇到异常的结果,可以在相应变量改变前后用printf打印一下变量的值,一般可以发现问题在哪里,例如这个程序里面,可以在a[k++]=*a,前面加一句printf打印:printf("a[%d]=%c,*a=%c,a=%s",k,a[k],*a,a)。
修改了一下,如下:
#include <stdio.h>
void fun(char * a){
int k=0;
char * temp=a;
for(a=a;*a!=0;a++)
if(*a!='*')
temp[k++]=*a;
temp[k]='\0';
}
int main(void){
char s[81];
printf("Enter a string:\n");
gets(s);
fun(s);
printf("The string after deleted:\n");
puts(s);
return 0;
}