用一行代码而不使用strlen()函数找出C语言字符串的长度?

4
我想找到一种方法来查找 C 中任何字符串的长度。
这是我的方法:
#include <stdio.h>
int main()
{
    char s[10] = "hello";
    int i , len = 0;
    for(i = 0; s[i] != '\0'; i++)
    {
        len++
    }
    printf("length of string is: %d" , len);
    return 0;
}

我想找到一种方法,只需要一行代码就能获得字符串的长度。


2
调用 strlen 是一行代码 - StoryTeller - Unslander Monica
我想找到一种不使用外部函数的方法。 - hello world
这是一个有点愚蠢的问题,因为C语言根本不关心行。但是预处理器会关心。这意味着你的整个程序只需要两行:包含和主函数。 - Zan Lynx
同样,C语言中最短的代码远非最快的代码。strlen函数可能会使用矢量指令进行优化,例如SSE4.2,就像这里所示:https://searchcode.com/codesearch/view/38004910/ - Zan Lynx
不完全是重复,但很接近:http://stackoverflow.com/questions/11395821/how-to-determine-the-length-of-a-string-without-using-strlen - Zan Lynx
7个回答

8
你可以简单地这样做:
for(len = 0; s[len] != '\0'; len++);

所以,只需一行代码,您就可以获得存储在 len 中的字符串长度。


如果OP已经在main()的开头声明了int len = 0,那么for (; s[len] != '\0'; len++);也可以工作。 - RoadRunner

3
您可以删除s[len] != '\0';比较来缩短代码:
for(len=0;s[len];len++);

2
你可以调用strlen()函数来一行代码中获取字符串的长度。 它返回一个大小值size_t strlen(char*)

我想找到长度,但不使用strlen()函数。 - hello world
OP非常清楚地表明他想要的是不使用strlen()函数的东西。 - David Hoelzer
1
strlen() 实际上返回的是 size_t,而不是 int - RoadRunner
谢谢伙计!@RoadRunner - Prithvi Raj

2

只需要这样做:

for(len=0;s[len];len++);

这将把长度存储在len中。


0
如果您只想要一行代码,那么像这样做也是可能的:
while (s[len] != '\0') len++;

这只是另一种做法,但不是最美观的方式。


0

最简版本:

#include <stdio.h>

int main(void)
{
  char s[10] = "hello", *p = s;

  while(*p++); /* "counting" here */

  printf("The length of string '%s' is: %td" , s, p - s);
}

它打印:

The length of string 'hello' is: 6

0

我相信,这应该是最短的版本:

for(l=-1;s[++l];);

这是18个字节,所以它是一个相当不错的代码高尔夫答案。然而,我更喜欢更经典的方式。

for(len = 0; s[len]; len++) ;

在实际的代码中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接