Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с определением к-во элементов в массиве. / 12 сообщений из 12, страница 1 из 1
18.10.2006, 21:04
    #34065027
Cheguevara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
Проблема с определением к-во элементов в массиве. Конкретно ф-я имеет прототип Sym(char symbols[]), в качестве входного параметра массив неопределенной длины из char элементов, не могу в процессе работы определить размер данного массива, sizeof(symbols) не помогает.
...
Рейтинг: 0 / 0
18.10.2006, 21:32
    #34065070
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
И не поможет....
вариантов два:
1) передавай в функцию адрес массива и его длину.
2) последний элемент массива должен быть уникальной константой, для char например чаще всего используется нолик.
...
Рейтинг: 0 / 0
19.10.2006, 05:05
    #34065327
AsPiro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
White OwlИ не поможет....
вариантов два:
1) передавай в функцию адрес массива и его длину.
2) последний элемент массива должен быть уникальной константой, для char например чаще всего используется нолик.
Позволю себе предложить третий вариант:
Код: plaintext
sizeof(symbols[])/sizeof(symbols[ 0 ])
...
Рейтинг: 0 / 0
19.10.2006, 05:16
    #34065330
AsPiro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
AsPiroПозволю себе предложить третий вариант:
Код: plaintext
sizeof(symbols[])/sizeof(symbols[ 0 ])

Похоже зря я себе это позволил:)
Это сработает для статического массива, а для массива неопределённой длины -нет:(
...
Рейтинг: 0 / 0
19.10.2006, 07:43
    #34065377
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
White Owl WO> 2) последний элемент массива должен быть уникальной
WO> константой, для char например чаще всего используется
WO> ноликЯ бы все же в первых элементах массива хранил их количество :)
а то бегать до конца массива как-то долго получается
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.10.2006, 10:09
    #34065577
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
Карабас Барабас White Owl WO> 2) последний элемент массива должен быть уникальной
WO> константой, для char например чаще всего используется
WO> ноликЯ бы все же в первых элементах массива хранил их количество :)
а то бегать до конца массива как-то долго получается

Аля дельфя? :)
...
Рейтинг: 0 / 0
19.10.2006, 10:13
    #34065594
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
Дабы выбрать правельное решение:

Для общего случая - передача длины массива отдельным параметром.
Для специализированных случаев (строки, например), можно выбрать любой другой вариант (взависимости от набора возможных элементов и способа их обработки), а можно и воспользоваться общим случаем. :)
...
Рейтинг: 0 / 0
19.10.2006, 10:16
    #34065602
LeonM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
...
Рейтинг: 0 / 0
19.10.2006, 10:31
    #34065656
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
LeonM _msize


Похоже, что это только VCшная фича.
...
Рейтинг: 0 / 0
19.10.2006, 10:39
    #34065683
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void Fun(int x[])
{
 char Buf[ 100 ];
 sprintf(Buf, "%d", _msize(x));
 MessageBox(NULL, Buf, "", MB_OK);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 static int a[ 10 ];
 int b[ 10 ];
 int *c, *d;
 c = (int *) new int[ 10 ];
 d = (int *)malloc( 10 *sizeof(int));
 Fun(a);
 Fun(b);
 Fun(c);
 Fun(d);
}

Ответ:
9586424
1244872
44
44

Осталось понять в функции, каким способом, вне функции выделялась память
Проверял на C++Builder 5
...
Рейтинг: 0 / 0
19.10.2006, 15:01
    #34066929
Zoroaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
main(int argc, char* argv[]) и как после этого можно спраивать как узнать размер массива =)
...
Рейтинг: 0 / 0
19.10.2006, 16:04
    #34067246
Zoroaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с определением к-во элементов в массиве.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
#define INTERNAL_SIZE_T size_t

struct _chunk { 
	 struct				_chunk * fd; 
     struct				_chunk * bk;
	 unsigned long		xz1;
     INTERNAL_SIZE_T	prev_size; 
     INTERNAL_SIZE_T	size;
	 unsigned long		xz2;
	 unsigned long		xz3;	
     unsigned long		magic_start; 
 };
size_t get_size_new(void *l){
	try{
		_chunk		*p;
		p=(_chunk*)(((char*)l)-sizeof(_chunk));
		return p->size;
	}catch(...){
		return  0 ;
	}
}

void Test(void *lp){
	printf("Size:%d\n",get_size_new(lp));
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	char *a = new char[ 65 ];
	char *b = new char[ 10000 ];
	char *c = new char[ 122 ];

	Test(a);
	Test(b);
	Test(c);

	return  0 ;
}
=) Работает только в дебаг версии... не ужто для релиса в heap не зранятся размеры?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с определением к-во элементов в массиве. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]