[英]size of array of pointers to strings?
我有這些字符串和指向這些字符串的指針數組,定義如下(在C中):
char str0[]= "Hello World";
char str1[]= "Byebye Baby";
char str2[]= "Regtime Girl";
char str3[]= "My Darling";
char *str_table[] = {str0,str1,str2,str3};
我需要將*str_table[]
(指針數組)傳遞給一個函數,該函數將掃描各種字符串以進行各種操作。 問題是如何找出數組中的指針數量? 似乎sizeof()
不能按我認為的那樣工作。
如果您有可用的str_table
變量,則只能恢復此信息。 在這種情況下,您可以編寫:
sizeof(str_table) / sizeof(str_table[0])
如果您試圖計算將數組作為參數接收的函數的長度,那就太遲了。 那時您無法恢復信息。 如果您處於該位置,則必須將長度傳遞給函數以及數組。
該函數可能如下所示:
void scan(const char* arr[], const size_t len)
{
for (size_t i=0; i<len; i++)
doSomething(arr[i]);
}
您這樣稱呼它:
size_t len = sizeof(str_table) / sizeof(str_table[0]);
scan(str_table, len);
從函數內部, arr
是const char**
類型的指針。 沒有提供長度信息。
解決此問題的另一種方法是對數組進行空終止。 像這樣:
const char *str_table[] = { str0, str1, str2, str3, NULL };
這與C字符串完全相同。 您可以僅將數組傳遞給函數,函數可以在數組上進行迭代,直到遇到空指針為止。
您需要sizeof(str_table) / sizeof(str_table[0])
。 sizeof(str_table)
將為您提供整個數組的大小(以字節為單位)。 將其除以數組元素的大小將得到數組中元素的數量。
現在,您還需要將此數組大小與其他參數一起傳遞給函數。
(&str_table)[1] - str_table
要在傳遞了數組的函數中查找字符串指針的數量:終止數組,如下所示:
char *str_table[] = {str0,str1,str2,str3, NULL};
添加一個函數檢查大小,如下所示:
ssize_t elements_in_terminated_array(char ** pp)
{
ssize_t s = -1;
if (NULL != pp)
{
char ** tmp = pp;
while(*tmp)
{
++tmp;
}
s = tmp - pp;
}
return s;
}
int main(void)
{
ssize_t s = elements_in_terminated_array(str_table);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.