函数fun的功能:将S所指字符串中下标为偶数的字符删除,剩余字符形成的新串放在t所指数组中

#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){inti,j=0;for(i=1;s[i]!='\0... #include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
{
int i,j=0;
for(i=1;s[i]!='\0';i+=2)
t[j++]=s[i];
t[j]='\0';

}

main()
{
char s[100], t[100];
void NONO ( );
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}

void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;

rf = fopen("in.dat","r") ;
wf = fopen("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) ;
}

这个fun编的哪不对啊?!谢谢!!
展开
 我来答
hong83210
推荐于2017-07-05 · TA获得超过481个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:314万
展开全部
这个函数基本没问题,主要注意如下几点:
1. 程序运行崩溃,是因为你没有“in.dat”文件可读;
2.输出到屏幕上和文件中的字符串出现乱码,是因为你的变量没有初始化,改为一下即可:
char s[100]={0}, t[100]={0} ;
更多追问追答
追问
这是二级模拟上机的编程,这个fun在out文件夹中输出不对,for那改成i<s字符串的长度就对,我就不道我这个为啥不对呢?谢谢!
追答
修改为小于字符串的长度,是因为你每次循环变量是+2的,如果不加控制,很容易造成数组的越界。
洛切鹏F
2011-03-24 · TA获得超过1539个赞
知道小有建树答主
回答量:475
采纳率:100%
帮助的人:337万
展开全部
用 s[i]!='\0' 来判断数组是否越界是不可靠的,因为你的 i 每次加2, 很有可能导致在字符串长度内满足不了 s[i] != '\0' 的条件. 举个例子,比如你的字符串是 s[] = "Hello!\0", 那么 s[1], s[3], s[5] 都不等于 '\0',下一次循环 i+=2,s[7]就已经越界了。
比较好的做法是用字符串的长度进行判断 i < strlen(s)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-23
展开全部
lovers
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式