2012-02-05 49 views
0

我想要一個用戶定義的函數,它等價於C中的strlen()函數。在下面的程序中它執行與strlen()相同的函數,但它具有限制它。我怎樣才能讓它計算任何長度的文字。用戶定義的函數,它等價於C中的strlen()C

#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); 
} 
+0

對我來說這似乎是正確的。你有什麼限制? – Jasper 2012-02-05 01:16:37

+1

你指的是哪一個限制? 「int」count變量的最大值? – Douglas 2012-02-05 01:16:38

+0

當你說它有限制時,你是什麼意思? – sbooth 2012-02-05 01:16:53

回答

2

我認爲你的「限制」是因爲你在一個20字節的緩衝區上使用了gets()。由於緩衝區溢出,您將遇到問題。當你這樣做時確實會發生什麼並不是完全可預測的。

如果您解決了這個問題,我認爲您的功能將按照您的預期工作。 (閱讀其他人的答案,瞭解您的長度功能。)

+0

我也是''get()'是它的問題。還有什麼我應該用來獲得一個字符串? – 2012-02-05 22:02:29

1

如果你真的想「任何長度」,你需要與計數器任意精度的整數庫(如libgmp)。然而,這是非常不合理的,因爲字符串必須適合你的記憶,並且每個字符實際上必須有一個地址。也就是說,任何適合可尋址空間的字符串的長度都可以用size_t(或unsigned long int,我想這將是與機器的寄存器大小相同的大小)的變量來表示。

(請不要問關於如何形成填充了整個可尋址存儲器串的一個過去的最末尾的指針。)

+0

如果我輸入一個非常長的字符串,例如400 500字母計數字符串,則程序崩潰。是什麼導致它崩潰?即使是一個普通的「int」也可以處理這麼多事情。我也用'size_t'嘗試了它,但仍然崩潰。 – 2012-02-05 21:59:28

+0

你的基本C和'gets'的理解是有缺陷的。閱讀手冊,然後停止使用'gets'並且使用'fgets'來代替。 – 2012-02-05 22:04:47

0

它的極限是int界限。如果增加它,請使用long。另外,使其無符號數加倍最大值。如果您想確認它是否合適,請使用size_t(原始的strlen使用)

順便說一句,從來沒有使用gets

+0

爲什麼不使用'gets'?我還應該使用什麼來得到一個字符串? – 2012-02-05 22:00:41

0

你想要什麼限制?歷史上,字符串以'\ 0'結尾,因爲它是唯一能夠知道字符串結束位置的方法,否則您實際上可能會讀取整個堆棧或堆棧,超過字符串的真實長度。其他函數用於標識字符串結尾的方法,以防止崩潰而不是特徵將在找到charset之外的值時停止讀取。

編輯: 顯然我誤解了這個問題。

-1
int main(){ 


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

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

    std::cout << Length; 

    std::cin.get(); 

}