繁体   English   中英

用户定义的函数,相当于C中的strlen()

[英]A user defined function which is equivalent of strlen() in C

我想要一个用户定义的函数,它等同于C中的strlen()函数。在下面的程序中它执行与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);
}

我认为你的“限制”是因为你在20字节的缓冲区上使用gets() 由于缓冲区溢出,您将遇到问题。 当你这样做时,究竟发生了什么并不是完全可以预测的。

如果您解决了这个问题,我认为您的功能将按照您的预期运行。 (阅读其他人的答案,了解你的长度函数。)

如果你真的想要“任何长度”,你需要一个任意精度的整数库(如libgmp)作为计数器。 但这是非常不合理的,因为字符串必须适合你的记忆,每个角色实际上必须有一个地址。 也就是说,适合可寻址空间的任何字符串的长度都可以用size_t类型的变量表示(或者我想是unsigned long int ;它将与机器的寄存器大小大小相同)。

(请不要询问如何形成填充整个可寻址内存的字符串的一个结尾指针。)

它的限制是int界限。 如果你增加它,请使用long 另外,使其无符号以使最大值加倍。 如果你想确保它适合,请使用size_t (使用原始strlen

BTW,永远不要使用gets

你想要的限制是什么? 历史上,字符串由'\\ 0'终止,因为它是知道字符串结束位置的唯一方法,否则您实际上可以读取整个堆栈或堆栈超过字符串的真实长度。 其他函数用于标识字符串结尾的方法, 以防止崩溃而不是作为一个功能是在找到charset外部的值时停止读取。

编辑:显然我误解了这个问题。

int main(){


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

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

    std::cout << Length;

    std::cin.get();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM