2014-11-21 67 views
1

在这个程序中,我试图计算并打印字符串的长度而不使用strlen()。 为什么它总是打印“长度为:0”计算并打印字符串的长度而不使用strlen()

#include <stdio.h> 

int length(char str[]) 
{ 
    int a_string; 
    for (a_string=0;str[a_string]!='\0';++a_string) 
    { 
     return a_string; 
    } 
} 

int main() 
{ 
    char line[80]; 
    printf("Enter string:\n"); 
    fgets(line,sizeof(line), stdin); 
    printf("Length (including newline) is: %d\n",length(line)); 
    return 0; 
} 

回答

0

不是最漂亮的变体,而是最快的变体。 然而,总是使用标准的功能,它往往是用汇编语言编写的一个特定的架构,最快速,你可以在C

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

size_t my_strlen(char *a) 
{ 
     char *b; 
     for (b = a; *a; a++); 
     return a - b; 
} 

int main(void) 
{ 
     char *str = "Hello world"; 
     printf("str len %d\n", my_strlen(str)); 
     return 0; 
} 
在你的代码

写你需要改变

for (a_string=0;str[a_string]!='\0';++a_string) 
{ 
    return a_string; 
} 

for (a_string=0;str[a_string]!='\0';++a_string) 
    { 
     ; 
    } 
return a_string 
4

return语句是在循环内,因此它退出马上在第一次迭代。在循环之后移动它。

1

在您的for循环中,您立即返回a_string,这将首次具有0的值。相反,您应该在循环完成后返回a_string

1

取回for循环的外部。当你的代码现在,返回被用于循环的每一次迭代。这不是你想要的。 更改您的代码:

int length(char str[]) 
{ 
    int a_string; 
    for (a_string=0;str[a_string]!='\0';++a_string) 
    { 
    } 
     return a_string; 
} 

现在这个循环运行,并在此处a_string就等于字符串的大小,并返回将被称作循环的一次迭代后结束其运行后,才,而不是。

0

的另一种方式,没有strlen()并且不增加计数器:

int length(char *str) 
{ 
    const char *w = str; 

    while(*str) 
    str++; 

    return str - w; 
} 
0
the code should not return until AFTER the calculation is complete. 
currently the code returns before ever doing any counting 
suggest the following, which you might evaluate to assure the 
returned value does not include the null byte 

int length(char* str) 
{ 
    int a_string; 
    for (a_string=0; str[a_string]!='\0'; ++a_string); 

    return a_string; 
} 
相关问题