太久没碰C了可能说得不对,C的内存安全检查特别松散,你这个应该是正好‘5’后面的那块内存值是0,所以printf打印到‘5’之后遇到0就结束了(strlen也是找0)。但是a并不拥有‘5’后面的0占用的内存单元,所以sizeof返回5,你再申请内存的时候,那个内存单元可能会分配给别的变量并且重新赋值,再打印就不会在‘5’那里结束了。
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
: #include<stdio.h>
: ...................
--
修改:a9udn9u FROM 66.75.102.*
FROM 66.75.102.*