我正在使用C.对于这个例子,假设char buf总是以“,”(我无法控制)结束,我们总是想要截断最后两个字符(例如删除“,” )。还假设它不会超过128个字符。以下代码是否安全(使用这些假设)?
char buf[128];
sprintf(buf, "Item One, Item Two, Item Three, Item Four, ");
int len = strlen(buf);
if (len > 2)
{
// We know it's greater than 2, lop off the last two characters
buf[len - 2] = '\0';
}
如果这不安全,截断空终止字符数组的最后几个字符的最佳方法是什么?
答案 0 :(得分:4)
是这是安全的,因为由于if语句,您不会有访问您不拥有的内存的危险。但是,我会将len
更改为size_t
类型,这是strlen()的返回类型。
此外,我会将if语句更改为if (len >= 2)
,以便处理只有您要切断的字符出现在buf
中的情况。这样,截断的字符串将是一个空字符串(因为字符串终止符将放在位置0)。