在这个程序中,我试图在不使用strlen()的情况下计算和打印字符串的长度。 为什么它总是打印"长度是:0"
#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 :(得分:4)
您的return
语句位于循环内部,因此它会在第一次迭代时立即退出。在循环之后移动它。
答案 1 :(得分:1)
在for循环中,您会立即返回a_string
,第一次的值为0
。相反,您应该在循环完成后返回a_string
。
答案 2 :(得分:1)
在for循环之外返回。 正如您的代码现在一样,循环的每次迭代都会使用返回值。这不是你想要的。 将您的代码更改为:
int length(char str[])
{
int a_string;
for (a_string=0;str[a_string]!='\0';++a_string)
{
}
return a_string;
}
现在循环将运行,a_string将等于字符串的大小,并且只有在循环完成其运行后才会调用返回,而不是在第一次迭代之后。
答案 3 :(得分: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 :(得分:0)
另一种方式,没有strlen()
且没有增加计数器:
int length(char *str)
{
const char *w = str;
while(*str)
str++;
return str - w;
}
答案 5 :(得分: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;
}