C语言问题,这个程序为何会出现如图现象

#include<stdio.h>#include<string.h>#include<ctype.h>charexpand(chars){inti=0,j=0,k=0,... #include<stdio.h>
#include<string.h>
#include<ctype.h>
char expand(char s)
{
int i=0,j=0,k=0,n=0;
char a[30],b[100];
strcpy(a,s);
n=strlen(a);
while(i<=n){
if(a[i]=='-'){
if(a[i-1]<a[i+1]){
for(b[j]=a[i]+1;b[j]<a[i+1];j++)
b[j]=b[j-1]+1;
i+=2;
}
else{
b[j]=a[i];
i++;
j++;
}
}
else{
b[j]=a[i];
i++;
j++;
}
}
return b;
}
int main()
{
char s1,s2;
scanf("%s1",&s1);
s2=expand(s1);
printf("%s\n",s2);
return 0;
}
展开
 我来答
御坂妹妹15842
推荐于2016-06-07 · TA获得超过326个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:227万
展开全部

错误非常多。

帮你改正后依然输出结果不正确。

char * expand(char *s)
{
    int i=0,j=0,k=0,n=0;
    //char a[30],b[100];
    //不能把临时变量返回!
    char *a = (char*)malloc(30);
    char *b = (char *)malloc(100);
    strcpy(a,s);
    n=strlen(a);
    while(i<=n)
    {
        if(a[i]=='-')
        {
            if(a[i-1]<a[i+1])
            {
                for(b[j]=a[i]+1; b[j]<a[i+1]; j++)
                    b[j]=b[j-1]+1;
                i+=2;
            }
            else
            {
                b[j]=a[i];
                i++;
                j++;
            }
        }
        else
        {
            b[j]=a[i];
            i++;
            j++;
        }
    }
    return b;
}
int main()
{
    char s1[1024],*s2;
    scanf("%s",&s1);
    s2=expand(s1);
    printf("%s\n",s2);
    return 0;
}

于是我自己写了一个,但是还有BUG,比如a-c-e的时候-e不会被扩展。如果你需要的话,请自行修改。

char * ex(char *str)
{
 int len = strlen(str);
 int idx=0,sidx=0;
 char * s = (char *)malloc(1024);
 memset(s,0,1024);
 for(idx=0;idx<len;idx++,sidx++)
 {
  if(str[idx]=='-')
  {
  sidx--;
  char ch = str[idx+1];
  char start = str[idx-1];
  while(start<=ch)
  {
  s[sidx]=start++;
  sidx++;
  }
  }
  else
  {
  s[sidx]=str[idx];
  }
 }
 return s;
}
追问
我写的程序总是出现那种有错误需要关闭的提示,这是因为什么?
追答
因为你的程序中对指针的使用有非常多的毛病,对于变量作用域的理解不清晰。
这种问题提示一般都是由于指针越界的原因,比如说你原来的expand函数,里面定义的数组b被你返回给main函数,可是在函数expand结束时,这个数组变量b就已经被释放了,你再去访问这个数组就是在访问不属于你的程序的内存,也就是“溢出”。
还有,
int a;
scanf("%d",a);这样的错误,诸如此类。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式