[英]Pointer to char into char array
我有以下用C語言編寫的代碼:
unsigned char * pan_protocol_get_image(unsigned long *psize)
{
long fsize;
unsigned char *result;
(void)pan_socket_write_ulong(MSG_GET_IMAGE);
pan_protocol_expect(MSG_IMAGE);
/* Read the size of the data in the message */
(void)pan_read_long(&fsize);
if (psize) *psize = fsize;
/*
* Allocate a buffer large enough for the result. We add one
* in case the size is zero because we need a valid pointer.
*/
result = (unsigned char *)malloc(fsize + 1);
/* Read the data directly into the result buffer */
(void)pan_read((void *)result, fsize);
return result;
}
據我了解,上面的函數返回一個指向字符(而不是字符數組)的指針。 我對么?
如果是這種情況,如何將函數結果(即指向字符的指針)轉換為字符數組,以便可以一一讀取它們?
在C語言中,數組只是相同類型元素的序列。 字符串只是數組,只是字符序列。
數組(和字符串)僅以一種方式表示- 指向第一個元素(字符)的指針。 您可能會得出結論,是的,僅通過指向第一個元素的指針就無法知道數組或字符串的長度。 因此,所有C字符串都附加一個空字符'\\0'
,該字符只是一個全零的字節,以檢測字符串的結尾。 對於數組,您必須傳遞長度(一些特殊的陷阱除外,我將在此處跳過)。
在您的程序中, malloc()
函數分配fsize+1
個字節並返回指向第一個字節的指針,然后由pan_protocol_get_image()
返回
作為C程序員,您有責任確保從函數返回的指針指向字符串的第一個字符,並且字符串具有空終止符。
只需將返回值用作普通字符串,就可以了。 還請注意,您不知道此函數返回的緩沖區(字符串)的長度。
您無需更改退貨類型。 您可以使用索引直接取消引用由malloc()
分配的內存區域。 您正在返回數組的基地址。 因此,通過向該地址添加索引,您可以直接訪問分配的內存。 您可以像這樣訪問
result[0],result[1],....
psize
由該函數設置,如果未發送NULL,則在這里
if (psize) *psize = fsize;
因此,您應該可以從外部執行以下操作:
for (unsigned long i = 0; i<psize; ++i) {
//do something with result[i] }
}
完成操作后,不要忘記釋放result
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.