Каков способ в C, чтобы кто-то мог найти длину массива символов?
Я с радостью соглашусь с psuedo-кодом, но не прошу прощения, если они захотят:)
Каков способ в C, чтобы кто-то мог найти длину массива символов?
Я с радостью соглашусь с psuedo-кодом, но не прошу прощения, если они захотят:)
Если массив char null
завершен,
char chararray[10];
size_t len = strlen(chararray);
Если у вас есть массив, вы можете найти количество элементов в массиве, разделив размер массива в байтах на размер каждого элемента в байтах:
char x[10];
int elements_in_x = sizeof(x) / sizeof(x[0]);
Для конкретного случая char
, так как sizeof(char) == 1
, sizeof(x)
даст тот же результат.
Если у вас есть указатель на массив, то нет способа найти количество элементов в массиве с указателем. Вы должны сами следить за этим. Например, данный:
char x[10];
char* pointer_to_x = x;
нет способа сказать только из pointer_to_x
, что он указывает на массив из 10 элементов. Вы должны сами отслеживать эту информацию.
Существует множество способов сделать это: вы можете либо сохранить количество элементов в переменной, либо закодировать содержимое массива таким образом, чтобы вы могли каким-то образом получить его размер, проанализировав его содержимое (это фактически то, завершенные строки: они помещают символ '\0'
в конец строки, чтобы вы знали, когда заканчивается строка).
Привет, хотя приведенные выше ответы в порядке, вот мой вклад в ваш вопрос.
//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
//variable used to access the subsequent array elements.
int offset = 0;
//variable that counts the number of elements in your array
int count = 0;
//While loop that tests whether the end of the array has been reached
while (*(ptr + offset) != '\0')
{
//increment the count variable
++count;
//advance to the next element of the array
++offset;
}
//return the size of the array
return count;
}
В функции main вы вызываете размер функции, передавая адрес первого элемента вашего массива. Например:
char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));
Все лучшее
Если вы хотите, чтобы длина массива символов использовала sizeof(array)/sizeof(array[0])
, если вы хотите, чтобы длина строки использовалась strlen(array)
.
Вы можете использовать strlen
strlen(urarray);
Вы можете запрограммировать его самостоятельно, чтобы понять, как он работает.
size_t my_strlen(const char *str)
{
size_t i;
for (i = 0; str[i]; i++);
return i;
}
если вы хотите размер массива, то вы используете sizeof
char urarray[255];
printf("%zu", sizeof(urarray));
Для этого также существует компактная форма, если вы не хотите полагаться на strlen. Предполагая, что массив символов, который вы рассматриваете, является "msg":
unsigned int len=0;
while(*(msg+len) ) len++;
Говоря "массив символов", вы имеете в виду строку? Как "привет" или "хахаха это строка символов".
В любом случае используйте strlen(). Прочтите немного об этом, там много информации об этом, например здесь.