如何在函数内找到 (* char) 数组的大小

How can I find the size of a (* char) array inside of a function?

本文关键字:char 数组 函数      更新时间:2023-10-16

我了解如何使用字符串类型数组查找大小:

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*''字符结尾,以指示字符串的结尾。这是您在算法中计算的字符,这就是您获得额外字符的原因。

至于你的第二个问题,似乎想创建一个所有字符串大小的新数组。

为此,您可以计算每个字符串的长度,然后将它们相加以创建一个新数组。