strlen返回终止空字符前面的字符数.的实现strlen可能是这样的:
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s) {}
return(s - str);
}
Run Code Online (Sandbox Code Playgroud)
此特定实现取消引用s,其中s可能包含不确定的值.它相当于:
int a;
int* p = &a;
*p;
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果有人这样做(导致strlen输出不正确):
char buffer[10];
buffer[9] = '\0';
strlen(buffer);
Run Code Online (Sandbox Code Playgroud)
是不确定的行为?