由于某种原因,当我在下面的代码中打印短语时,我发现fgets函数没有得到文本文件中的最后一个字符。我已经检查了mone1,看到它给文件中的文本留出了足够的空间。有人对此事有解释和解决方法吗?
Tnx,Dean。
ps我很确定字符串的长度不是问题,因为即使我将其更改为2个字符,它仍然只打印第一个字符(不打印最后一个字符),并且全部写入同一条线。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
printf("ss");
FILE * sent=NULL;
FILE * voca=NULL;
sent=fopen(argv[1],"r");
voca=fopen(argv[2],"r");
if(voca==NULL){
printf("cannot open voca ");
fclose(voca);
}
if(sent==NULL){
printf("cannot open sent");
fclose(sent);
}
int mone1=0;
int mone2=0;
while(EOF!=fgetc(sent))
mone1++;
while(EOF!=fgetc(voca))
mone2++;
fseek(sent,0L,SEEK_SET);
fseek(voca,0L,SEEK_SET);
char* phrase=(char*)(malloc(mone1*sizeof(char)));
char* voc=(char*)(malloc(mone2*sizeof(char)));
fgets(phrase,mone1,sent);
fgets(voc,mone2,voca);
printf("%s",phrase);
return 0;
}
答案 0 :(得分:5)
char *fgets(char * restrict s, int n, FILE * restrict stream);
fgets
函数最多只读取小于由n
指定的字符数从流指向{{1 }}
换句话说,如果您需要阅读s
个字符,请至少传递mone1
n
并确保缓冲区足够。原因是mone1 + 1
会在最后添加尾随fgets
。
答案 1 :(得分:1)
fgets()
从size-1
读取file stream
个字符,并在最后添加空字符。
例如
fgets(buf,2,file_stream);
buf[0]=some_character and buf[1]='\0';