2012-03-14 2 views
0
char* username 

- указатель на начало массива символов (в с).вычисление размера массива в c, учитывая только указатель

Как вычислить размер массива, есть ли функция, которая может это сделать?

+7

если null завершено, используйте 'strlen' – perreal

+0

Как сказал perreal, если NUL завершен, используйте strlen. Если он назначен с помощью malloc, вы можете использовать нестандартный способ просмотра внутренних данных системы malloc. В противном случае вам, вероятно, не повезло. –

ответ

2

использование strlen (имя пользователя). Но массив должен заканчиваться на '\ 0'. В противном случае вы не сможете этого сделать.

+0

Это:) Я буду использовать это. – spatara

0

Вы не можете этого сделать. Если это массив, который вы выделили, вы должны иметь размер его для начала. Для того, что знает C и компилятор, это всего лишь указатель.

+0

Я не выделяю размер, это в функции, все, что у меня есть, является указателем на начало – spatara

+1

Если это ваша функция, добавьте аргумент, который будет содержать длину массива. – MByD

+0

строка вводится из командной строки, я не хочу ее испортить, задав также размер – spatara

-1

Если это строка с нулевым символом, используйте strlen для подсчета непустых символов, тогда длина массива не менее длины + 1 символ.

Если у вас есть указатель на массив, вы можете использовать sizeof (указатель), чтобы получить размер, выделенный ему диспетчером памяти.

+2

Это не так, как работает 'sizeof'. 'sizeof' возвращает размер самого указателя. –

+0

Вы правы, однако вы можете использовать sizeof для массивов. Как char my_string [500]; а затем sizeof (my_string) вернет 500. Но поскольку контур OP находится внутри функции, это не сработает. – Spidey

Смежные вопросы