Я понимаю, как найти размер, используя массив строкового типа:Как я могу найти размер массива (* char) внутри функции?
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;
}
Что вы пытаетесь выполнить с помощью своего второго вопроса? – Elipzer
Не знаю, что вы просите, но ваши параметры функции являются указателями, поэтому нет способа узнать длину массива, на который они могут указать. Вам необходимо передать длину отдельно или использовать значение часового, что и делает первый пример. – juanchopanza
Я ответил на ваши вопросы. Однако я не уверен, что вы понимаете, что вы пытаетесь с помощью указателя тасования: это будет один символ в строке в таблице и без места для нулевого терминатора. Разве вы не хотите, чтобы общий размер перетасовал в строки? Или вы хотите сохранить в нем индексы перетасованных строк? В последнем случае вы должны рассмотреть 'sizet_t *' вместо 'char *' (или лучше 'vector shuffled (i)'). –
Christophe