[英]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不會像這樣跟蹤數組中的元素數量。
你有幾個選擇:
您不能將數組作為函數參數傳遞給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.