簡體   English   中英

如何在函數內部找到(* 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 %d\n", 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 %d\n", i);
    char * shuffled = new char[i];
    return shuffled;
}

您不應該在第一段代碼中遞減計數器以獲取實際大小。 如果您有兩個元素和一個空元素,則循環將以value結尾,這是正確的。

在第二個片段中,您將使用指向指針的指針。 因此,while條件應為*theStrings (假設NULL指針成為表末尾的標記)。

請注意,在兩種情況下,如果表格不保留表格結尾的標記,則可能會超出范圍。 為什么不使用vector<string> 這樣您就可以得到大小而沒有任何循環,並且不會冒越界的風險

您在這里看到的是字符串或'\\0'的“終止”字符

當您使用char *數組而不是字符串時,可以更好地看到這一點。

這是我制作的尺寸計算器的示例。

int getSize(const char* s)
{
  unsigned int i = 0;
  char x = ' ';
  while ((x = s[i++]) != '\0');
  return i - 1;
}

如您所見, char*'\\0'字符結尾,以指示字符串的結尾。 那就是您要在算法中計算的字符,這就是為什么要獲得額外字符的原因。

至於第二個問題,似乎想創建一個具有所有字符串大小的新數組。

為此,您可以計算每個字符串的長度,然后將它們加在一起以創建一個新數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM