Пользовательская функция, которая эквивалентна strlen () в C - PullRequest
0 голосов
/ 05 февраля 2012

Я хочу пользовательскую функцию, которая эквивалентна функции strlen () в C. В приведенной ниже программе она выполняет ту же функцию, что и strlen (), но у нее есть ограничение.Как я могу сделать так, чтобы он считал любую длину текста.

#include <stdio.h>
#include <conio.h>
void main()
{
    int len(char *);
    char s[20];
    int l;
    printf("Enter a string: ");
    gets(s);
    l=len(s);
    printf("length of string is =%d",l);
    getch();
}

int len(char *t)
{
    int count=0;
    while(*t!='\0')
    {
        count++;
        t++;
    }
    return(count);
}

Ответы [ 5 ]

2 голосов
/ 05 февраля 2012

Я думаю, что ваш «предел» в том, что вы используете gets() в буфере из 20 байтов. У вас будут проблемы из-за переполнения буфера. То, что происходит, когда вы делаете это, не совсем предсказуемо.

Если вы исправите это, я думаю, что ваша функция будет работать так, как вы ожидаете. (Прочтите ответы других людей, чтобы понять, как работает ваша длина.)

1 голос
/ 05 февраля 2012

Если вы действительно хотите «любой длины», вам понадобится целочисленная библиотека произвольной точности (например, libgmp) для счетчика.Это довольно неразумно, поскольку строка должна умещаться в вашей памяти, и каждый символ должен иметь адрес.То есть длина любой строки, которая помещается в адресуемое пространство, может быть выражена в переменной типа size_t (или, я полагаю, unsigned long int; она будет иметь такой же размер, как размер регистра машины).

(Пожалуйста, не спрашивайте о том, как сформировать указатель на конец строки, который заполняет всю адресуемую память.)

0 голосов
/ 02 марта 2015
int main(){


    int Length = 0;
    char StrArray[10] = "Hello";

    while (StrArray[Length] != '\0')
    {
        StrArray[Length];
        Length++;
    }

    std::cout << Length;

    std::cin.get();

}
0 голосов
/ 05 февраля 2012

Какой лимит вы хотите?Исторически строка завершается символом «\ 0», потому что это единственный способ узнать, где заканчивается строка, в противном случае вы могли бы фактически прочитать весь стек или кучу за истинную длину строки.Метод, используемый другими функциями для определения конца строки, для предотвращения сбоя, не являющегося функцией , заключается в прекращении чтения, когда найдено значение вне кодировки.

Редактировать: Очевидно, я неправильно понял вопрос.

0 голосов
/ 05 февраля 2012

Его предел составляет int границы.если вы увеличите его, используйте long.Кроме того, сделайте это без знака, чтобы удвоить максимум.Если вы хотите быть уверенным, что он подходит, используйте size_t (который используется strlen)

Кстати, никогда не используйте gets.

...