Каким образом в C кто-то может найти длину массива символов?
Я с радостью приму псевдокод, но не прочь, чтобы кто-то написал его, если захочет :)
Каким образом в C кто-то может найти длину массива символов?
Я с радостью приму псевдокод, но не прочь, чтобы кто-то написал его, если захочет :)
При условии, что массив символов null
завершен,
char chararray[10] = { 0 };
size_t len = strlen(chararray);
sizeof()
, и strlen()
возвращают size_t
, который отличается от int
тем, что потенциально может быть больше или меньше и, конечно, беззнаковым.
- person Chris Lutz; 15.11.2010
Если у вас есть массив, вы можете найти количество элементов в массиве, разделив размер массива в байтах на размер каждого элемента в байтах:
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'
в конец строки, чтобы вы знали, когда строка заканчивается).
sizeof()
, и strlen()
возвращают size_t
, который отличается от int
тем, что потенциально может быть больше или меньше и, конечно, беззнаковым.
- person Chris Lutz; 15.11.2010
Хотя предыдущие ответы в порядке, вот мой вклад.
//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;
}
В вашей основной функции вы вызываете функцию размера, передавая адрес первого элемента вашего массива.
Например:
char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));
int strlen(const char* pStr){ int i = 0; while (*pStr) { ++i; } return i; }
- person DividedByZero; 25.05.2015
Вы можете использовать стрлен
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()
должен возвращать size_t
(без знака), а не int
(со знаком). А спецификатор printf()
для size_t
равен "%zu"
(или "%zx"
или "%zo"
для шестнадцатеричного или восьмеричного).
- person Chris Lutz; 15.11.2010
Если вам нужна длина массива символов, используйте sizeof(array)/sizeof(array[0])
, если вы хотите длину строки, используйте strlen(array)
.
Для этого также есть компактная форма, если вы не хотите полагаться на strlen. Предполагая, что рассматриваемый вами массив символов - "msg":
unsigned int len=0;
while(*(msg+len) ) len++;
используя sizeof()
char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5
используя string.h
#include <string.h>
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;
}
Вы можете использовать эту функцию:
int arraySize(char array[])
{
int cont = 0;
for (int i = 0; array[i] != 0; i++)
cont++;
return cont;
}
Говоря «массив символов», вы имеете в виду строку? Например, «привет» или «хахаха, это строка символов»..
В любом случае используйте strlen(). Почитайте немного об этом, есть много информации об этом, например здесь.
char[#]
, вы можете использовать sizeof
, но будьте осторожны и не пытайтесь использовать его на char *
- person Chris Lutz; 15.11.2010
sizeof
, не забудьте вычесть 1 из нулевого терминатора.
- person dan04; 15.11.2010
char s[] = "sup";
.
- person Matt Joiner; 15.11.2010
strlen()
, либоsizeof()
. Это зависит от того, что вам нужно. - person ruslik   schedule 15.11.2010