C 相同的文件,相同的文件大小,但内存比较返回非零

C 相同的文件,相同的文件大小,但内存比较返回非零,c,file-io,C,File Io,我对C知之甚少的人说最后一个if块中的print语句应该被打印出来,但是它没有,你知道为什么吗 为了更加清晰,并向您展示完整的代码,我在if块之前添加了一个define语句和两个fread语句。分配的内存不是预先初始化的,因此其内容是随机的,因此几乎可以肯定这两个分配是不同的 预期的(从概率上说,“确定的”)结果正是所发生的 您是想在使用memcmp进行测试之前将文件加载到这两个缓冲区中,但忘记了这样做吗?分配给的内存不是预先初始化的,因此其内容是随机的,因此几乎可以肯定这两个分配是不同的 预期

我对C知之甚少的人说最后一个if块中的print语句应该被打印出来,但是它没有,你知道为什么吗

为了更加清晰,并向您展示完整的代码,我在if块之前添加了一个define语句和两个fread语句。

分配的内存不是预先初始化的,因此其内容是随机的,因此几乎可以肯定这两个分配是不同的

预期的(从概率上说,“确定的”)结果正是所发生的

您是想在使用
memcmp
进行测试之前将文件加载到这两个缓冲区中,但忘记了这样做吗?

分配给的内存不是预先初始化的,因此其内容是随机的,因此几乎可以肯定这两个分配是不同的

预期的(从概率上说,“确定的”)结果正是所发生的


您是否打算在使用
memcmp
进行测试之前将文件加载到这两个缓冲区中,但忘记了这样做?

请考虑以下几点:
1.
long int
的返回类型,因此最好将
fileSize
声明为
long int
(。在
malloc
中使用时,您也可以去掉
sizeof(char)

3.在第一次调用
fread
后,文件流指针按
fileSize
指定的文件大小前进。因此,紧随其后的第二次
fread
将无法读取任何内容(假设第一次调用成功)。这就是您看到程序中提到的行为的原因。在第二次调用
fread
之前,您需要使用
revend
重置文件流指针。您还可以检查
fread
的返回值,该值是成功读取的字节数,以检查实际读取成功的字节数完全正确。尝试以下几行:

#define "/local/home/..."

FILE *fp;

short *originalUnPacked;
short *unPacked;

int fileSize;

fp = fopen(FILENAME, "r");
fseek (fp , 0 , SEEK_END);
fileSize = ftell (fp);
rewind (fp);

originalUnPacked = (short*) malloc (sizeof(char)*fileSize);
unPacked = (short*) malloc (sizeof(char)*fileSize);

fread(unPacked, 1, fileSize, fp);
fread(originalUnPacked, 1, fileSize, fp);    

if( memcmp( unPacked, originalUnPacked, fileSize) == 0) 
{
 print (" unpacked and original unpacked equal ") // Not happens
}
4.最好检查
fopen
malloc
等的返回值,以防出现故障,即
NULL
fopen
malloc
的情况下进行检查

希望这有帮助!

请考虑以下几点:
1.
long int
的返回类型,因此最好将
fileSize
声明为
long int
(。在
malloc
中使用时,您也可能会去掉
sizeof(char)

3.在第一次调用
fread
后,文件流指针按
fileSize
指定的文件大小前进。因此,紧随其后的第二次
fread
将无法读取任何内容(假设第一次调用成功)。这就是您看到程序中提到的行为的原因。在第二次调用
fread
之前,您需要使用
revend
重置文件流指针。您还可以检查
fread
的返回值,该值是成功读取的字节数,以检查实际读取成功的字节数完全正确。尝试以下几行:

#define "/local/home/..."

FILE *fp;

short *originalUnPacked;
short *unPacked;

int fileSize;

fp = fopen(FILENAME, "r");
fseek (fp , 0 , SEEK_END);
fileSize = ftell (fp);
rewind (fp);

originalUnPacked = (short*) malloc (sizeof(char)*fileSize);
unPacked = (short*) malloc (sizeof(char)*fileSize);

fread(unPacked, 1, fileSize, fp);
fread(originalUnPacked, 1, fileSize, fp);    

if( memcmp( unPacked, originalUnPacked, fileSize) == 0) 
{
 print (" unpacked and original unpacked equal ") // Not happens
}
4.最好检查
fopen
malloc
等的返回值,以防出现故障,即
NULL
fopen
malloc
的情况下进行检查

希望这有帮助!

您在哪里将这两个文件加载到由
originalUnPacked
unPacked
指向的内存中?始终检查返回值。如果
malloc
成功,也不检查
fopen
fread
fseek
ftell
成功,请告诉我们是否成功t仍在这样做。您将这两个文件加载到由
originalUnPacked
unPacked
指向的内存中的什么位置?始终检查返回值。如果
malloc
成功,您不会检查
fopen
fread
fseek
ftell
是否成功,然后告诉我们是否成功他还在这样做。