小编ペニス*_*ペニス的帖子

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)

是不确定的行为?

c string strlen

6
推荐指数
1
解决办法
889
查看次数

标签 统计

c ×1

string ×1

strlen ×1