我想从文本文件中读取后,从每个单词中找到第5个字母.我不知道我哪里错了.
进入文件路径后,我会看到一个弹出窗口
read.c已停止工作.
代码:
#include<stdio.h>
#include<conio.h>
int main(void){
char fname[30];
char ch[]={'\0'};
int i=0;
FILE *fp;
printf("enter file name with path\n");
gets(fname);
fp=fopen(fname,"r");
if(fp==0)
printf("file doesnot exist\n");
else{
printf("File read successfully\n");
do{
ch[i]=getc(fp);
if(feof(fp)){
printf("end of file");
break;
}
else if(ch[i]=='\n'){
putc(ch[4],stdout);
}
i++;
}while(1);
fclose(fp);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想找到每个单词的第5个字母
这不是你的代码现在正在做的事情.由于各种原因,这是错误的
char ch[]={'\0'};是一个长度为1的数组.在未绑定的情况下ch[i],您将超出分配的内存,从而创建 未定义的行为.gets() 非常危险,它可能导致缓冲区溢出.getc()逐个字符地读取,而不是逐字逐句,因此您还需要将空格字符(' ')作为分隔符.等等
我的建议,使用以下算法重写您的代码.
使用读取整行到缓冲区 fgets()
3.1.如果fgets()返回NULL,则很可能已到达文件末尾.结束.
3.2.否则,继续下一步.
使用空格作为分隔符来对行进行标记.检查返回的令牌是否为NULL.strtok()' '
4.1.如果token为NULL,请转到步骤3.
4.2.如果token不为NULL,则继续执行下一步.
检查strlen()返回的令牌(这是单词).如果超过4,则打印令牌的索引 4.(请记住,数组索引c是0基于的).
继续第4步.