回复 10楼 hjx1120
那它怎么输出的是8啊?
C的“字符串”是搜寻字符数组中的'\0',以此作为结束符,它会一直找下去。strlen(name2)函数调用,就从name2的入口开始一直找,它扫过'r'、'a'、'i'之后,没有找到'\0',就会越界进入后面的内存区域,恰好C的栈数据区分配,是逆向增长的,也就是说,栈的数据,name1位于name2的后面(这与你定义的顺序有关,自己变化一下琢磨),那么这个越界动作正好进入name1的入口,它一直找下去,把name1也扫了一遍,总算给找到'\0'了,这时,它的计数器已是8,就把name2的长度当作8返回。我让你在中间插入一个字符串(它的长度是10,此时因为已找到'\0',就不会继续向name1处去),就证明这个道理。你也可以在中间插入别的数据,比如一个int、double等等。
注意:解答虽然是这样,但这种数据分配的规律不是“必然如此”的,写程序千万不要依赖这种副作用!不要特意写这样的代码。