2012-09-12 209 views
-1

我已定义的字符串:char数组和字符串长度

char ch[300]; 

当我gettng串长度

strlen(ch); 

我总是有长度等于323。为什么我有这个神奇的号码?

这是否发生,因为函数strlen正在寻找第一个0x00字节并且获取数组之外?

让strlen走出阵列安全吗?

这是否意味着如果我想使用strlen函数,我必须设置最后一个字节为ch[300]=0

+1

我建议在定义char并初始化为NULL后总是使用“memset”函数。 – vikky

+1

有一组函数可以确保您不会超出缓冲区的大小,因为您似乎在这里执行 –

+1

-1。这是太基本的问题,而不是谷歌(或者只是更仔细阅读C教程)。 – 2012-09-12 09:56:45

回答

3

strlen搜索第一次出现0x00。如果它没有找到它,它会继续计数。这可能是非常危险的。如果您试图获得超出界限的价值,您的计划可能会崩溃,或者您可能会得到无法预测的结果。 请务必确保字符串以空字符结尾。

3

这是否发生,因为函数strlen正在寻找第一个0x00字节并获取数组之外?

是否安全,让strlen的走阵之外?

没有

这是否意味着,如果我想使用strlen函数,我必须最后一个字节设置为CH [300] = 0?

几乎 - ch[299] = 0;此外,您应该在初始化缓冲区而不是未初始化缓冲区上调用它。