我已定义的字符串:char数组和字符串长度
char ch[300];
当我gettng串长度
strlen(ch);
我总是有长度等于323
。为什么我有这个神奇的号码?
这是否发生,因为函数strlen正在寻找第一个0x00
字节并且获取数组之外?
让strlen走出阵列安全吗?
这是否意味着如果我想使用strlen函数,我必须设置最后一个字节为ch[300]=0
?
我已定义的字符串:char数组和字符串长度
char ch[300];
当我gettng串长度
strlen(ch);
我总是有长度等于323
。为什么我有这个神奇的号码?
这是否发生,因为函数strlen正在寻找第一个0x00
字节并且获取数组之外?
让strlen走出阵列安全吗?
这是否意味着如果我想使用strlen函数,我必须设置最后一个字节为ch[300]=0
?
strlen搜索第一次出现0x00
。如果它没有找到它,它会继续计数。这可能是非常危险的。如果您试图获得超出界限的价值,您的计划可能会崩溃,或者您可能会得到无法预测的结果。 请务必确保字符串以空字符结尾。
这是否发生,因为函数strlen正在寻找第一个0x00字节并获取数组之外?
是
是否安全,让strlen的走阵之外?
没有
这是否意味着,如果我想使用strlen函数,我必须最后一个字节设置为CH [300] = 0?
几乎 - ch[299] = 0;
此外,您应该在初始化缓冲区而不是未初始化缓冲区上调用它。
我建议在定义char并初始化为NULL后总是使用“memset”函数。 – vikky
有一组函数可以确保您不会超出缓冲区的大小,因为您似乎在这里执行 –
-1。这是太基本的问题,而不是谷歌(或者只是更仔细阅读C教程)。 – 2012-09-12 09:56:45