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