簡體   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