Мне нужно использовать массив строк с неизвестным размером. Здесь у меня есть пример, чтобы убедиться, что все работает нормально. Мне нужно знать размер этого массива в ClassC, но не передавая это значение в качестве аргумента. Я вижу так много способов сделать это (здесь и в google), но, как вы сейчас увидите, они не сработали. Они возвращают количество символов в первой позиции массива.C++ получение размера массива строк
void ClassB::SetValue()
{
std::string *str;
str = new std::string[2]; // I set 2 to do this example, lately it will be a value from another place
str[0] ="hello" ;
str[1] = "how are you";
var->setStr(str);
}
Теперь в ClassC если я отладки, strdesc[0] ="hello" and strdesc[1] = "how are you"
, так что я полагаю, что класс С получать информацию ок ....
void classC::setStr(const std::string strdesc[])
{
int a = strdesc->size(); // Returns 5
int c = sizeof(strdesc)/sizeof(strdesc[0]); // Returns 1 because each sizeof returns 5
int b=strdesc[0].size(); // returns 5
std::wstring *descriptions = new std::wstring[?];
}
Так .. в classC, как я могу знать, strdesc-х размер массива, который должен вернуть 2 ?? Я также попытался с:
int i = 0;
while(!strdesc[i].empty()) ++i;
, но после того, как i=2
программа вылетает с ошибкой сегментации.
Спасибо,
Редактировать с-плюсом РЕШЕНИЯ:
Заключение: Там нет никакого способа узнать размер массива, когда я передать его указатель на другую функцию
- Передайте размер к этой функции ... или ...
- Используйте векторы с классом std :: vector.
использовать 'std :: vector'. –
user463035818
Нет (стандартного) способа получить размер, который у вас есть только указатель, вам нужно отслеживать его самостоятельно. И выполнение 'sizeof' на указателе даст вам размер указателя (обычно 4 на 32-битных системах и 8 на 64-битных системах). –
Вы не можете, если вы не передадите его как тип, где известен размер (fx 'std :: vector' или 'const std :: string strdesc [2]'). –
skyking