簡體   English   中英

將char指向char數組的指針

[英]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.

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