简化字符串迭代
我正处于学习编码的初期(特别是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; }
注意: s
是const char *
,但不是char *
。