以下是根据《标准C库》实现的strlen.c:
```c #include size_t strlen(const char *s) { const char *p = s; while (*p) ++p; return p - s; } ```
```c #include size_t strlen(const char *s) { const char *p = s; while (*p) ++p; return p - s; } ```
size_t strlen(const char *s){
const char *sc;
for(sc = s; *sc != '\0'; ++sc)
return (sc-s); }
我对sc=s
的合法性理解正确吗?
sc=s
是一个合法的赋值语句,因为两个变量都被声明为const
,都保护了指向s所指向的对象。在这种情况下,改变sc或s指向的位置是合法的,但任何对*s
或sc
的赋值(或引用)都是非法的。
sc
和s
不是常量,它们指向可能是常量的东西。 - M.M