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