簡體   English   中英

讀取圖像文件內容以緩沖

[英]Reading image file contents to buffer

char* full_string;
int size;
FILE* f = fopen(filename,"r");

fseek(f,0,SEEK_END);
size = ftell(f);
fseek(f,0,SEEK_SET);
full_string = malloc(size+1);
fread(full_string,1,size,f);
fclose(f);

full_string[size] = '\0';

我正在嘗試使用上述代碼將文件的內容讀取到名為“ full_string”的緩沖區中,但是當我逐步進入gdb時,我發現以下內容存儲在“ full_string”中:

full_string = 0xa46df0 "\377\330\377", <incomplete sequence \340>

我是C語言的新手,所以我不知道如何解釋這個問題。 值得一提的是,我正在讀取的文件是圖像文件。 這些圖像大多數為50,000字節或更大。 任何幫助將不勝感激!

char *不會自動表示字符串。 用C表示的字符串是一個字節序列,存儲在char * (或當char []傳遞到某個地方時會退化為char *char [] ,但讓我們將它們視為與此答案相同的東西)。 該系列字節必須以'\\0' (空字節)結尾,並且在內部的任何位置均不包含該字節。

如果您在十六進制編輯器中打開該特定文件,則可能會看到類似FF D8 FF E0 00 ,假設我(a)正確進行了八進制十六進制轉換,並且(b)沒有犯任何其他愚蠢的錯誤。 這在文件中是有效的,但是如果您嘗試將其解釋為字符串(例如,使用strlen或GDB所做的事情),則不會獲得〜50000個字符的期望值,因為少於50000個字符在第一個空字節之前。 這也意味着以'\\0'結尾的“字符串”是毫無意義的。 我的意思是,它不是字符串。 這是一個字節序列。

如果長度很重要,則需要根據需要將其與結構或其他變量一起存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM