问个字符串数组的边界问题。
我申请一个 char buf[32] 的字符串数组。
但为什么可以对 buf[32] = 'a ' 呢? 这个数组的最后一位不是应该为buf[31]么,我对buf[32]操作不会越界么?
[解决办法]
"我在申请了 char buf[32]的时候,系统是不是会自动在末尾给我添加上一位 '\0 ',而这一位其实就占据了buf[32]的位置 "
不是!
得到“strlen(buf)算出的值是 33”,只是所谓的走XX运而已。
[解决办法]
不太理解您什么意思。不过确实,用strlen(buf)算出的值好像是不太稳定。 有的程序里居然能算出35。好奇怪,这是为什么?
==============================================================================
strlen() 是见到 '\0 ' 结束的,因为没有初始化,所以什么时候碰到 '\0 '未知
sizeof() 是ok的
[解决办法]
strlen是算字符串长度的,是个运行时的函数,而不是像sizeof那样,在编译时计算数组长度:
比如对于:
char s[100000] = " ";
strlen(s)的结果是0。
[解决办法]
遇到内存中的\0结束