Поиск длины массива символов в C

Каков способ в C, чтобы кто-то мог найти длину массива символов?

Я с радостью соглашусь с psuedo-кодом, но не прочь кого-то написать его, если они захотят 🙂

Если массив символов имеет 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 () . Прочтите немного об этом, есть много информации об этом, как здесь .

используя sizeof ()

 char h[] = "hello"; printf("%d\n",sizeof(h)-1); //Output = 5 

using string.h

 #include  char h[] = "hello"; printf("%d\n",strlen(h)); //Output = 5 

использование функции ( реализация strlen )

 int strsize(const char* str); int main(){ char h[] = "hello"; printf("%d\n",strsize(h)); //Output = 5 return 0; } int strsize(const char* str){ return (*str) ? strsize(++str) + 1 : 0; }