3

出于某种原因,当我在以下代码中打印短语时,我发现 fgets 函数没有获取文本文件中的最后一个字符。我已经检查了 mone1 并看到它为文件中的文本提供了足够的空间。有人对此事件有解释和解决方案吗?

Tnx,院长。

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;
}
4

2 回答 2

6
char *fgets(char * restrict s, int n, FILE * restrict stream);

fgets函数最多从 stream 指向的流中读取指定的字符数少 1 的字符n到 指向的数组中s

换句话说,如果您需要读取字符,请至少mone1传入as并确保缓冲区也足够。原因是会在末尾添加尾随。nmone1 + 1fgets\0

于 2013-10-05T14:41:51.943 回答
1

fgets()从 中读取size-1字符file stream并在最后添加 Null 字符。

例如

fgets(buf,2,file_stream);

buf[0]=some_character and buf[1]='\0';
于 2013-10-05T14:43:08.060 回答