C语言程序,编译无错误,但是运行输入输入数组以后出现Unhandled exception,

C语言程序,编译无错误,但是运行输入输入数组以后出现Unhandled exception,怎么改?
#include<stdio.h>
#include<string.h>
int f(char e[]);
char c[100]={0},d[100]={0};
int main()
{
int a,i=0,m,p,j,q=0;
char e[10];
int b;
scanf("%s",c);
b=strlen(c);
for(a=0;a<b;a++)
{
if((c[a]>=65&&c[a]<=90)||(c[a]>=97&&c[a]<=122))
{
d[i]=c[a];
m=a;
i=i+1;
}
else if(c[a]>=48&&c[a]<=57)
{
e[q]=c[a];
q=q+1;
if(c[a+1]<48||c[a+1]>57)
{
p=f(e);
for(j=1;j<p;j++)
{
d[i]=c[m];
i=i+1;
}
}
}
}
puts(d);
}

int f(char e[])
{
int i,sum,b;
i=0;
sum=0;
b=strlen(e);
for(i=0;i<b;i++)
{
sum=sum*10+(e[i]-48);
}
return sum;
}

你在调用
p=f(e);
之前,没有为数组e的字符串添加字符串结束符0,所以计算出来的p会是一个超大的值,导致在for(j=1;j<p;j++)循环内容里会访问到数组d的边界之外,导致程序崩溃。
修改方法:
在p=f(e);之前加一行:
e[q]=0;追答

另外,这里也要对访问数组d的地方做边界检查,将for(j=1;j<p;j++)改成for(j=1;j<p&&i<100;j++)改成

另外,这里也要对访问数组d的地方做边界检查,将for(j=1;j<p;j++)改成for(j=1;j<p&&i<100;j++)

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-29
这往往是访问了无效内存

~追问

那应该怎么改呢?

相似回答