如何在函数内找到 (* char) 数组的大小
How can I find the size of a (* char) array inside of a function?
我了解如何使用字符串类型数组查找大小:
char * shuffleStrings(string theStrings[])
{
int sz = 0;
while(!theStrings[sz].empty())
{
sz++;
}
sz--;
printf("sz is %dn", sz);
char * shuffled = new char[sz];
return shuffled;
}
在上面的例子中,我的一个问题是,为什么我必须将大小减少 1 才能找到数组中元素的真实数量?因此,如果代码如下所示:
char * shuffleStrings(char * theStrings[])
{
//how can I find the size??
//I tried this and got a weird continuous block of printing
int i = 0;
while(!theStrings)
{
theStrings++;
i++;
}
printf("sz is %dn", i);
char * shuffled = new char[i];
return shuffled;
}
您不应该在拳头片段中递减计数器以获得实际大小。 如果你有两个元素和一个空元素,循环将以 value 结束,这是正确的。
在第二个代码段中,您将处理指向指针的指针。 因此,while条件应该是*theStrings
的(假设NULL 指针是表末尾的标记。
请注意,在这两种情况下,如果表无法保留表末尾的标记,则可能会超出界限。 为什么不与vector<string>
合作? 然后你可以得到没有任何循环的大小,并且不会冒出界的风险
您在这里看到的是字符串或' '
中的"终止"字符
当您使用 char* 数组而不是字符串时,您可以更好地看到这一点。
这是我制作的尺寸计算器的示例。
int getSize(const char* s)
{
unsigned int i = 0;
char x = ' ';
while ((x = s[i++]) != ' ');
return i - 1;
}
如您所见,char*
以' '
字符结尾,以指示字符串的结尾。这是您在算法中计算的字符,这就是您获得额外字符的原因。
至于你的第二个问题,似乎想创建一个所有字符串大小的新数组。
为此,您可以计算每个字符串的长度,然后将它们相加以创建一个新数组。