strlen是否具有未初始化值的字符串未定义行为?

ペニス*_*ペニス 6 c string strlen

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)

是不确定的行为?

M.M*_*M.M 3

调用标准函数strlen会导致未定义的行为。DR 451澄清了这一点:

当用于不确定值时,库函数将表现出未定义的行为

有关更深入的讨论,请参阅此线程