Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fread()\fscanf()读取早期的EOF_C_Eof - Fatal编程技术网

fread()\fscanf()读取早期的EOF

fread()\fscanf()读取早期的EOF,c,eof,C,Eof,在编写一个通过Haffman树对文件进行压缩的程序时,我遇到了一个问题,即EOF的出现时间早于文件本身的实际结束时间 我有一个存储数据的文件,如:*字符(1字节)*-*代码(不同字节数)* 在阅读7之后,这些组合EOF升高,阅读停止,尽管还有更多的这种结构 动态数组的读取循环+初始化代码: char* boxarr = (char*)malloc(sizeof(char)); int boxarrcount = 0; Box* text = (Box*)malloc(si

在编写一个通过Haffman树对文件进行压缩的程序时,我遇到了一个问题,即EOF的出现时间早于文件本身的实际结束时间

我有一个存储数据的文件,如:*字符(1字节)*-*代码(不同字节数)*

在阅读7之后,这些组合EOF升高,阅读停止,尽管还有更多的这种结构

动态数组的读取循环+初始化代码:

    char* boxarr = (char*)malloc(sizeof(char));
    int boxarrcount = 0;
    Box* text = (Box*)malloc(sizeof(Box));
    int textcount = 0;

    do {
        do {
            boxarr = (char*)realloc(boxarr, sizeof(char) * (boxarrcount + 1));
            fscanf(f, "%c", &boxarr[boxarrcount]);
            boxarrcount++;
        } while (boxarr[boxarrcount - 1] != ";"[0]);
        text[textcount].array = (char*)malloc(sizeof(char) * (boxarrcount - 1));
        memcpy(text[textcount].array, boxarr, boxarrcount - 1);
        text[textcount].depth = boxarrcount - 1;
        textcount++;
        boxarrcount = 0;
        text = (Box*)realloc(text, sizeof(Box) * (textcount + 1));
        fread(&text[textcount].name, sizeof(char), 1, f);
    } while (fgetc(f) != EOF);

    free(boxarr);
如有需要,框式结构:

typedef struct Box {
    short Parent;
    short ChildL;
    short ChildR;
    unsigned char name;
    int num;
    char* array;
    int depth;
} Box;
一份文件:

1212112211;‰-22122221;P-21112211;N-11212121;G-22212221;
-1212121;
-11211212;-1112212; -2122221;I-21222221;H-21222112;D-21221112;
新行也是字符\r和\n


还值得一提的是,它在0x1a字符()上停止。

它读取的6是什么?您需要以二进制模式打开文件。另外,
do…while(fgetc(f)!=EOF)
看起来不对,您正在丢弃数据。@n.“代词是m。”。好的,我会用二进制试试。丢弃数据是什么意思?@user253751提供的一段文件是它的开始。首先,它读取ziping和unziping文件中使用的eof字符的代码。然后按顺序读取6个字符:‰,P,N,G,\r\N然后在读取0x1a后停止。实际上是七个。
do{do{scanf}fread;}而(fgetc)
是一种新的反模式。但这绝对是一个反模式。它读取的6是什么?你需要以二进制模式打开文件。另外,
do…while(fgetc(f)!=EOF)
看起来不对,您正在丢弃数据。@n.“代词是m。”。好的,我会用二进制试试。丢弃数据是什么意思?@user253751提供的一段文件是它的开始。首先,它读取ziping和unziping文件中使用的eof字符的代码。然后按顺序读取6个字符:‰,P,N,G,\r\N然后在读取0x1a后停止。实际上是七个。
do{do{scanf}fread;}而(fgetc)
是一种新的反模式。但这绝对是一种反模式。