2014-03-02 43 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

相关问题