char str[10]=“china\n\0";给定了初始化表达式,且初始化列表中字符小于定义的char数组的元素个数10,所以之后的部分被隐式初始化为0,str的内存布局为:
{'c','h','i','n','a','\n','\0',0,0,0}。事实上作为char而言字符串结束符'\0'和0是同一个字符(char的每个位为0),str[0]到str[6]是一个合法的字符串,其中str[0]到str[5]是非0字符,str[6]是结束符。于是可以确定str中前6个char非0,后4个char等于0。而strlen对于给定的字符指针,依次检查每个char,如果发现等于0则返回给定指针到这个0元素之间的元素个数并返回。从&str[0]这个位置开始,第一个0元素的位置为&str[6],这样,结果是&str[6]-&str[0],等于6。
====
[原创回答团]
参考资料:原创