回复 楼主 不懂C编程
#include"stdio.h"
char dele(char *s)
{
int n=0,i;
for(i=0;s[i];i++)
if(s[i]>='0'&&s[i]<='9') //这里写的和你的题意要求相反。我看你的意思这里应该是 if( s[i] < '0' || s[i] > '9')
s[n++]=s[i];
s[n]='0';
//这里要写'\0'或者直接写0。
return 1;
//这里的函数返回值我不知道你想干什么。
}
void main()
{
char t;
t=dele("had4658gu"); //这里是最关键的错误。!!!因为常量区的字符串是无法修改的!
//所以这里应该使用堆,栈,或静态区的空间,而唯独不能使用常量字符串。可以改造如下:
char buffer[64] = "had4658gu";
dele(buffer); //这里的buffer位于栈上,可改写。
printf("%s\n",t); //这里你的t经过上面的函数,t=1了,那么你去访问地址为1的数据,当然要出现无法预料的结果了。
}
你的这个函数写的问题好多。我还是按照你的意思把你上面的这些代码重写如下:
<code>
#include <ctype.h>
#include <stdio.h>
char* dele(char *s)
{
int n=0,i;
for(i=0;s[i];i++)
if(!isdigit(s[i]))
s[n++]=s[i];
s[n]=0;
return s;
}
void main()
{
char *t=NULL;
char buffer[]="had4658gu";
t=dele(buffer);
printf("%s\n", t);
}
</code>
[
本帖最后由 hoodlum1980 于 2009-10-18 20:34 编辑 ]