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

标签 c arrays string pointers strlen

所以我正在学习嵌入式系统类(class),我们正在使用 C 语言。 现在是第 2 周,所以我们只是刷新我们的 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);
}

谢谢!

最佳答案

那是因为:

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

关于C - strlen ("288_882_288"+strlen ("288_882_288")/2 = 6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41885550/

相关文章:

java - 质数计算公式直到 100000 才显示质数它显示到 9973

arrays - 你如何在普通的 lisp 中复制一个数组?

java - 带有附加参数的 JNA 回调函数

C语言字重不同

arrays - 修改结构数组内结构的值

c - 从 C 源代码中删除字符串

c# - 如何在 C# 中解析示例字符串

c# - 找到字符串后拆分大型 XML 文件

我们可以重置 sigsetjmp 以再次返回 "0"(重置 sigsetjmp)吗?

c - C语言中如何运行多个for循环?