函数 fun 的功能是: 将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,
函数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);
} 展开
都删除,串中剩余字符所形成一个新串放在所指的数组中。
程序为什么验证不出错,但是编译没有结果,还有运行时会崩溃,本人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);
} 展开
1个回答
展开全部
你打印不出结果的原因是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]就超过了你原本分配的内存,指针越界了
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]就超过了你原本分配的内存,指针越界了
更多追问追答
追问
追答
我这里调试不了,你把以下函数的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';
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询