由於某些原因,當我打開一個文件並在Python和C中逐字節地讀取它並嘗試打印結果時,我得到隨機字符/數據混合在其中。在C和Python的終端中獲取隨機字符
例如,當我讀了前8個字節的PNG圖像,如下面的例子:
/* Test file reading and see if there's random data */
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define PNG_BYTES_TO_CHECK 8
int
main(void)
{
char fname[] = "../images/2.png";
FILE *fp = fopen(fname, "rb");
if (fp == NULL) abort();
char *buffer = (char *)malloc(PNG_BYTES_TO_CHECK);
if (fread(buffer, 1, PNG_BYTES_TO_CHECK, fp) != PNG_BYTES_TO_CHECK)
abort();
unsigned i;
for (i = 0; i < PNG_BYTES_TO_CHECK; ++i) printf("%x ", buffer[i]);
printf("\n");
free(buffer); fclose(fp);
return 1;
}
我得到這個垃圾到stdout:
ffffff89 50 4e 47 d a 1a a
但是,當我打開該文件一個十六進制編輯器,字節是完全沒有(這是一個有效的PNG簽名):
任何想法,以什麼可能會導致此?我沒有Python的例子,但是我記得前幾天我在處理字節級別的文件和打印內容時重複使用了mumbo jumbo。
[不要在C中拋出malloc的結果](http://stackoverflow.com/q/605845/995714) –
爲什麼你說這是垃圾? –
@LưuVĩnhPhúc感謝您的鏈接,我以前沒有遇到過。 – bjd2385