跪求C语言大神
这是今天碰到的一个题,是的数组a并没有初始化,初始化我也就不来问了(那答案就很明显了)。请看下面两张图的区别。别跟我提未初始化的栈内存是垃圾什么的。
我提两个问题:
1.为什么这里int a = 36影响了结果?
2.解释一下为什么一个是1和10,一个是9和10?
这么说就有点明白了
strlen(b)在去掉前面的int a = 36之前是1,去掉之后是9,这个俩数是固定的 。我分别测试了 ,多次运行和不修改程序重新编译也不会改变。这怎么解释呢,是不是跟Linux系统有关系?
strlen:是求字符串有多少个字符。
sizeof:是求变量总共有多少个字符空间,也就是系统给这个变量分配了多大的空间。
比如:
char a[100] = "123456789";对于字符串a,系统给他分配了100个字节的空间。但是我们并没有将这100个字节都使用到,我们就使用到了前9个字节(当然,后面还有一个字符串结束标识符)。
所以strlen(a)的结果是9.
而sizeof(a)的结果却是100.
这就是他们结果为什么不一样的原因。
在你这个程序中,为什么strlen的2次结果不一样了??
我们前面也说了,strlen:是求字符串有多少个字符。
在你的程序中,你的字符串没有初始化,所以,你所占用的内存里面的数据还是最后一次被使用时的数据。(是什么数据谁也不知道)
所以,strlen得到的结果就是不确定的值,也因此每一个值都是有可能的。
追问你说的“最后一次被使用时的数据”是不变的吗? 为什么我多次运行和不修改程序重新编译strlen(b)的值分别1和9也不会改变呢