2013-01-18 115 views
0

我試圖打印由捲曲返回的動態下載圖像,如圖:FWRITE動態大小

char *raw_image = malloc(1024); 

    raw_image = doCurl("GET", img_url, NULL, NULL); 

    printf("Content-Type: image/png\n\n"); 

    fwrite(raw_image, sizeof(raw_image), 20000, stdout); 

如果我做的尺寸比20000小 - 圖像被削減。我怎樣才能使這個數字動態?我不想寫入文件 - 標準輸出是最好的選擇。

任何幫助表示讚賞。

回答

1

理想情況下,您需要一種方法來知道您正在下載的文件(圖像)的大小。

使用libcurl首先獲取頭並獲取大小。

比方說您存儲大小小號

當你的Alloc緩衝區您務必做好

char *raw_image = malloc(s); 

因爲小號是你的數據的大小,以保持不是1024個字節!

下載文件並將其保存在raw_image

然後

fwrite(raw_image, 1, s, stdout); 

注意的sizeof(raw_image)是指向你的緩衝區的大小,在這樣8個字節64位hw架構。 這不是文件的大小!

-

但是....

-

你獲取的圖像,並streming它在標準輸出上。

爲什麼不做一個簡單的電話curl

1

[微型語言無關的評論:你確定這是最好寫的原始PNG數據到stdout]

而且,看來你正在使用libcurl來獲取圖像。那麼,如果你沒有爲CURL句柄設置自定義回調函數,那麼它將直接寫入標準輸出。

但是,如果這不是你打算做的,你可能想看看realloc()

0

您正在告訴fwrite寫入指針大小的20000個對象。這是因爲sizeof(raw_image)返回指針raw_image的大小,因此在大多數32位機器上是4個字節,在大多數64位機器上是8個字節。它確實不是返回raw_image指向的緩衝區的大小。

我不知道如何確定您下載的圖片大小,但您需要以某種方式確定該大小。一旦你這樣做,你的fwrite調用應該看起來像這樣:

fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)