如何确定字符串的长度(不使用strlen())

size_t stringlength(const char *s) 

使用此函数,如何找到字符串的长度? 我不是指使用 strlen() ,而是创建它。 任何帮助是极大的赞赏。

循环/遍历字符串,保持计数。 当你点击\0 ,你已到达字符串的末尾。

涉及的基本概念是循环,条件(测试字符串的结尾),维护计数器和访问字符序列中的元素。

注意 :有更多惯用/聪明的解决方案。 然而,对于C和编程而言,OP显然是新的(没有违法行为,我们都是初学者),因此,如果解决方案之一或编写的话,对它们施加指针算法可能过于简洁/紧凑的解决方案更少关于OP的需求而更多关于海报编程技巧的演示:)故意为简单易懂的解决方案提供建议至少为我赢得了一个downvote(是的,这是我想不到的“ 虚构代码 ”。我不想准备好代码解决方案,但让OP在一些指导下弄清楚它。

要点 :我认为答案应该始终调整到提问者的水平。

 size_t stringlength(const char *s) { size_t count = 0; while (*(s++) != '\0') count++; return count; } 

令人困惑的部分可能是表达式*(s++) ,这里你移动指针使用++运算符指向缓冲区中的下一个字符,然后你使用解除引用运算符*来获取指针位置的内容。 另一个更清晰的方法是:

 size_t stringlength(const char *s) { size_t count = 0; while (s[count] != '\0') count++; return count; } 

另外几个参考版本(但不太清晰)是:

 size_t stringlength(const char *s) { size_t count = 0; while (*s++) count++; return count; } size_t stringlength(const char *s) { const char* c = s; for (; *c; c++); return c - s; } 

虽然这里所说的代码只是一个参考,为您提供了如何实现上述答案中描述的算法的想法,但存在更有效的方法来执行相同的要求(例如,检查glibc实现 ,一次检查4个字节)

这可能不是相关的代码,但我认为值得知道。 因为它节省了时间……

 int a[] = {1,2,3,4,5,6}; unsigned int i,j; i = &a; //returns first address of the array say 100 j = &a+1; //returns last address of the array say 124 int size = (ji)/sizeof(int); // (ji) would be 24 and (24/4) would be 6 //assuming integer is of 4 bytes printf("Size of int array a is :%d\n",size); 

对于字符串::

 char a[] = "Hello"; unsigned int i,j; j = &a+1; //returns last address of the array say 106 i = &a; //returns first address of the array say 100 printf("size of string a is : %d\n",(ji)-1); // (ji) would be 6 

如果你感到困惑怎么来&a + 1返回数组的最后一个地址,请检查此链接。


假设s是非空指针,则以下函数从其开始遍历s,直到找到终止零。 对于传递s++;每个字符s++; count是递增count++;

 size_t stringlength(const char *s) { size_t count = 0; while (*s) { s++; count++; } return count; }