fread()\fscanf()读取早期的EOF
在编写一个通过Haffman树对文件进行压缩的程序时,我遇到了一个问题,即EOF的出现时间早于文件本身的实际结束时间 我有一个存储数据的文件,如:*字符(1字节)*-*代码(不同字节数)* 在阅读7之后,这些组合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
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)
是一种新的反模式。但这绝对是一种反模式。