2014-03-02 42 views
-3

使用功能我寫了這個代碼,但它給了長0。I上午初學者,也找不到什麼是錯的這這是我的代碼:查找字符串長度,而不使用strlen的和用C

#include <stdio.h> 
#include <conio.h> 
int strlgnth(char *s);  /* func prototype */ 

int strlgnth(char *s) 
{ 
    int i; 
    { 
     for (i = 0; s[i] != '\0'; i++); 
     i = i++; 
    } 
    return i; 
} 
int main() 
{ 
    char s[1000], i, n; 

    printf("Enter a string: "); 
    scanf("%s", s); 

    { 
     i = strlgnth(s); 
    } 
    printf("Length of string: %d", n); 

    getch(); 
    return 0; 
} 
+6

請妥善格式化你的代碼。 –

+2

你有幾個不必要的方括號,爲什麼? – Nabla

+0

爲什麼沒有循環體的'for'語句? –

回答

3

您將計算結果分配給i,但打印出n

此外,由於n從未被初始化過,因此代碼(也)會運行到未定義的行爲中,以便將其打印出來。


此行

i=i++; 

是無用的。


分配的strlgnth()的結果應具有相同的類型的值,即int

或甚至更好使strlgnth()和所有i s爲size_t

size_t保證足夠寬以容納平臺可能使用的任何尺寸。


最後這一行

scanf("%s", s); 

是危險的,因爲它允許用戶overlfow s。爲了避免這種情況告訴scanf() charaters的最大數量來掃描,即緩衝區的大小 - 1備用的1個字符是necessaory持有0終止子:

scanf("%999s", s); 

也許你應該清理你的來源的佈局。這可能有助於獲得概述。

3

刪除此行:

i=i++; 

它是(a)中不必要的和(b)它導致未定義bahviour。

另外,正如其他人已經注意到,你很困惑inmain()

2

注意的是,他行:

i=i++; 

是錯誤的。行爲是未定義的。嘗試刪除它,因爲我的循環定義本身增加了。

3
int strlgnth(char *s) 
{ 
    int i;  
    for(i=0;s[i]!='\0';i++) 
    ; 
    return i; 
} 

printf("Length of string: %d",i); 
+0

並在'main'中聲明'i'爲'int i';' –

+0

@FilipeGonçalves是的,這樣會更好 - 對於小字符串,這應該仍然有效。 – Hogan

相關問題