函数 fun 的功能是: 将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,

函数fun的功能是:将s所指字符串中除了下标为奇数,同时ASCII值也为奇数的字符之外,其余的所有字符
都删除,串中剩余字符所形成一个新串放在所指的数组中。
程序为什么验证不出错,但是编译没有结果,还有运行时会崩溃,本人win7 32位,软件visual c++6.0

程序如下,还希望详细解答;

#include<stdio.h>
#include<string.h>
void fun(char *s,char t[])
{ int i,j;
for(i=0;i>=0;i++)
{
int j=0;
while(s[i]%2==1&&i%2==1)
{
t[j]=s[i];
j++;
}
}
}
main()
{
char s[100],t[100]; void NONO();
printf("\nPlease enter String S:");
scanf("%s",s);
fun(s,t);
printf("\n The result is : %s\n",t);
NONO();
}
void NONO()
{
/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
char s[100],t[100];
FILE *rf,*wf;
int i;
rf=fopen("c:\\KSWJJ\\2444310002220594\\in.dat","r");
wf=fopen("c:\\KSWJJ\\2444310002220594\\out.dat","w");
for(i=0;i<10;i++){
fscanf(rf,"%s",s);
fun(s,t);
fprintf(wf,"%s\n",t);
}
fclose(rf);
fclose(wf);
}

你打印不出结果的原因是func函数里for循环里i递增停不下来,并且使得形参s和t也越界了
for(i=0;i>=0;i++)
{
int j=0;
while(s[i]%2==1&&i%2==1)
{
t[j]=s[i];
j++;
}
}
你的i超过了100后,s[i]和t[j]就超过了你原本分配的内存,指针越界了追问

void fun(char *s,char t[])

{ int l=strlen(s);

int i,j;

for(i=0;i<l;i++)

{

int j=0;

if((int)s[i]%2==1&&i%2==1)

{

t[j]=s[i];

j++;

}

}t[j]='\0';

}

我的fun函数改成这样还是打印不出来,而且出现程序崩溃。

追答

我这里调试不了,你把以下函数的l打印出来,并在fun函数的结尾打印一个log,如printf("fun end\n");来按指示fun函数跑到结尾没有
void fun(char *s,char t[])

{
int l=strlen(s);
int i,j;
for(i=0;i<l;i++)
{
int j=0;
if((int)s[i]%2==1&&i%2==1)
{
t[j]=s[i];
j++;
}
}
t[j]='\0';
}

追问

这个程序要求只能在fun函数里面做出来,不能编辑其他的部分程序,我不知道为什么跑不出来。难道while用错了。。。。

追答

我刚才帮你运行了下fun函数,修改如下

void fun(char *s,char t[])
{
int l=strlen(s);
int i,j=0;
for(i=0;i<l;i++)
{
//int j=0;
if((int)s[i]%2==1&&i%2==1)
{
t[j]=s[i];
j++;
}
}
t[j]='\0';
}

追问

为什么注释掉int j=0;之后就好了呢?表示不是很理解,还请指点,谢谢你了。
int j=0;
while(s[i]%2==1&&i%2==1)
{
t[j]=s[i];
j++;
}这段程序不知道为什么会出错,跟局部变量有关是吗,还是有些不是很清楚,不过比之前懂了很多。

温馨提示:答案为网友推荐,仅供参考
相似回答