簡體   English   中英

在C中如何獲取char字符串指針數組中的項目數

[英]In C how to get number of items in array of pointers to char strings

我想實現以下函數來打印通過指針數組引用的幾個char字符串的內容。 如何在不傳遞總數作為函數參數的情況下確定有多少指針?

如果它是一個int類型的數組,那么就可以使用sizeof()函數,但是假設我的數組中的每個項都是一個指向char字符串的指針,並且每個字符串可能有不同的長度,我認為我不能使用這種方法。

void printCharArray(char *arr[]){

    int length = sizeof(arr) / sizeof(char); /* this does not give correct 
                                          number of items in the pointer array */

    for (int i=1;i<=length; i++) {
        printf("Array item: [%s]",arr[i]);
    }

}

沒有內置的方法來執行此操作,因為C不會像這樣跟蹤數組中的元素數量。

你有幾個選擇:

  1. 傳遞數組中的項目數。
  2. 將最后一項設置為NULL,以便代碼知道它何時到達結尾。 (這就是如何處理C字符串。)
  3. 否則,請修改數據結構以跟蹤數組中的項目數。

您不能將數組作為函數參數傳遞給C.當用作函數參數時,數組名稱會衰減為指向其第一個元素的指針,您必須單獨指定可用數組元素的數量。

(在函數參數類型的上下文中, T[]T*T[12]是相同的,因此您的函數參數也可能是char ** arr 。)

像這樣:

void printCharArray(char ** arr, size_t len) { /* ... */ }

int main()
{
    char * arr[10] = { "Hello", "World", /* ... */ };

    printCharArray(arr, sizeof(arr)/sizeof(*arr));
}

(或者你可以提供一個“第一個”和一個“一個接一個”的指針,這可能更自然一些 。)

如果將最后一個有效元素之后的元素設置為null,則可以執行以下操作:

void printCharArray(char *arr[]){

    for (int i=0; arr[i] != NULL; i++) {
        printf("Array item: [%s]",arr[i]);
    }

}
void printCharArray(char *arr[]) {
    int length = sizeof(arr) / sizeof(char*); /* this does not give correct 
                                                 number of items in the pointer array */
    for (int i=0;i<=length; i++) {
        printf("Array item: [%s]",arr[i]);
    }
}

int main()
{
    char * arr[10] = { "Hello", "World", /* ... */ };
    printCharArray(arr); 
}

首先我將y聲明為全局var。 htmTags是一個* char []。 然后在main()

y = 0;
while( htmTags[y] ) {
        y++;
}

我沒有在數組末尾添加null。 提供數組元素的實際數量

或者這也適用於(y = 0; htmTags [y]; y ++);

暫無
暫無

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

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