我在学习编码的最开始(特别是C)。 在编写一个计算数组字符的函数用于学习目的时,我正在质疑自己(我非常肯定),如果有可能简化这个迭代:
int stringlength(char* s)
{
int i = 0;
while (s != NULL && *(s + i) != '\0')
i++;
return i;
}
我想将i++
保留在迭代本身内(for loop?)。
我很欣赏你们给我的任何暗示。如果您发现了一些与我无关的问题 - 请告诉我。
答案 0 :(得分:2)
if(s == NULL)
return 0;
int i;
for(i = 0; s[i] != '\0'; i++);
我相信这可以解决你的目的。
编辑:为输入char*
添加NULL检查,因为NULL
可能是一个可能的值。
答案 1 :(得分:1)
int stringlength(char* s)
{
if (!s)
return 0;
int i = -1;
while(s[++i]!='\0');
return i;
}
答案 2 :(得分:0)
我测试了strlen(NULL)
的{{1}},导致glibc
,我认为导致Segment Fault
是合理的。所以这是我的实现:
Segment Fault
注意:#include <assert.h>
int stringlength(const char* s) {
assert(s != NULL);
int i;
for (i = 0; s[i]; ++i);
return i;
}
为s
,但不是const char *
。
答案 3 :(得分:-1)
我建议使用指针算术。
首先,处理NULL
情况(空字符串,因此只获得空终止符)。否则,迭代指针并递增计数器。然后,只需返回该计数器。
int stringlength(char* s)
{
if (!s) return 0;
int len = 0;
while (*s++) len++;
return len;
}
(*s++)
的神奇之处是什么?
这相当于*(s ++)!= 0.但是因为++
的优先级高于*
,所以括号无用。
此外,您可以查看此thread。