简化字符串迭代

我正处于学习编码的初期(特别是C)。 在编写一个计算数组字符的函数用于学习目的时,我正在质疑自己(我很确定),如果有可能简化这个迭代:

int stringlength(char* s) { int i = 0; while (s != NULL && *(s + i) != '\0') i++; return i; } 

我想将i++保留在迭代本身内(for循环?)。

我很欣赏你们给我的任何暗示。 如果你发现一些与我无关的问题无关 – 请告诉我。

我建议使用指针算术。

首先,处理NULL情况(空字符串,因此您只获得空终止符)。 否则,迭代指针并递增计数器。 然后,只需返回该计数器。

 int stringlength(char* s) { if (!s) return 0; int len = 0; while (*s++) len++; return len; } 

(*s++)有什么神奇之处? 这相当于*(s ++)!= 0.但是因为++的优先级高于* ,所以括号是无用的。

此外,您可以查看此主题 。

 if(s == NULL) return 0; int i; for(i = 0; s[i] != '\0'; i++); 

我相信这应该可以解决你的目的。

编辑:为输入char*添加NULL检查,因为NULL可能是一个可能的值。

 int stringlength(char* s) { if (!s) return 0; int i = -1; while(s[++i]!='\0'); return i; } 

我测试了glibc strlen(NULL) ,它会导致Segment Fault ,我认为引起Segment Fault是合理的。 所以这是我的实现:

 #include  int stringlength(const char* s) { assert(s != NULL); int i; for (i = 0; s[i]; ++i); return i; } 

注意: sconst char * ,但不是char *