我已经定义了字符串:
char ch[300];
当我获得字符串长度
strlen(ch);
我的长度总是等于323
。为什么我有这个神奇的数字?
是否会发生这种情况,因为函数strlen正在查找第一个0x00
字节并且在数组之外?
让strlen离开阵列是否安全?
这是否意味着如果我想使用strlen函数,我必须将最后一个字节设置为ch[300]=0
?
答案 0 :(得分:3)
strlen搜索第一次出现0x00
。如果它没有找到这个,它继续计数。这可能非常危险。如果你试图获得超出范围的值,你的程序可能会崩溃,或者你可能会得到不可预测的结果。
始终确保String终止为空。
答案 1 :(得分:3)
是否会发生这种情况,因为函数strlen正在寻找第一个0x00字节并且在数组之外?
是
让strlen离开数组是否安全?
没有
这是否意味着如果我想使用strlen函数,我必须将最后一个字节设置为ch [300] = 0?
几乎 - ch[299] = 0;
此外,你应该在初始化缓冲区上调用它,而不是未初始化的缓冲区。