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;
} 展开
#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;
} 展开
展开全部
错误非常多。
帮你改正后依然输出结果不正确。
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);这样的错误,诸如此类。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询