神奇宝贝之男主大吾:c程序纠错

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 09:03:46
下面的程序是用指针从一行字符串中删除输入的字母。我编了如下:不知道错在什么地方。希望指教。紧急需要答案。
#include<stdio.h>
#include<string.h>
void main(void)
{ char a[20],*p,c;
char *delchr(char *p,char c);
printf("input the string:\n");
gets(a);
printf("the deltel character:\n");
c=getchar();
p=delchr(a,c);
puts(p);
}
char *delchr(char *p,char c)
{char *p1,a;
int flag=0;
p1=&a;
while(*p!='\0')
{ if(*p!=c)
{ p1=p++;
p1++;
flag++;
}
else
p++;
}
return p1-flag-1;
}

tanyuguo你说的不对,我下面的语句其实已包含了p1=p;如果向你那样的话。那么要是删除第一个字母,就没法删除了。

看来你对指针使用还是有所体会,但程序的错误之处在于:
!你没有把字符数组中的字符删除的操作
(应该有删除一个字符的操作:其后所有字符前移一位,加个内循环)
!没必要传入地址型参数还由函数返回数组地址
(函数可不用返回任何值,在数组中有所更改即可)
修改时自己把数组画个图来操作以免出错

楼主你还没有完全弄清楚C语言里函数是怎样定义的。
虽然你在main里调用的是delchr(a,c),但delchr在定义时第一个参数你定义的是char *p,那么在delchr的函数体里面你就要用p来代替那个a。
因此,只要把delchr函数体的第一行改为char *p;然后把p1=&a改成p1=p就行了

看不懂

是什么呀

char a[20],*p,c; //数组有数据溢出可能
char *delchr(char *p,char c); //error1
printf("input the string:\n");

c=getchar();
p=delchr(a,c); //error2
puts(p);

char *p1,a; //char *p1,a[21];
int flag=0;
p1=&a;

p1=p++; //*p1=*p++;

return p1-flag-1; //*p1='\0';memcpy(p1,p,strlen(p1));return p;

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

char *delchr(char *p,char c);
void main(void)
{ char a[20],*p,c;

printf("input the string:\n");
gets(a);
printf("the deltel character:\n");
c=getchar();
p=delchr(a,c);
puts(p);
}
char *delchr(char *p,char c)
{char *p1,a[21],*p2=p;
int flag=0;
p1=&a;
while(*p!='\0')
{ if(*p!=c)
{ *p1=*p++;
p1++;
flag++;
}
else
p++;
}

memcpy(a,p2,flag);
*(p2+flag)='\0';
p=p2;
return p;
}