C - strlen("288_882_288"+ strlen("288_882_288")/ 2 = 6?

Nat*_*ate 1 c arrays string pointers strlen

所以我正在学习嵌入式系统课程,我们正在使用C.第二周,所以我们只是刷新了我们的C代码内存.

这段代码是如何打印6号的?幕后发生了什么?

int main (void) {
    char msg[] = "288_882_288";
    int my_length = 0xFFFFFFFF;
    my_length = strlen(msg+strlen(msg) /2);

    printf("%d",my_length);//prints 6
    fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

use*_*500 7

那是因为:

strlen(msg) = strlen("288_882_288") = 11
strlen(msg) / 2 = 5 (floor value taken)

msg + strlen(msg) / 2 is the same as msg + 5 == &msg[5]    
strlen(msg+strlen(msg) /2) = strlen(&msg[5]) = strlen("82_288") = 6
Run Code Online (Sandbox Code Playgroud)