C - 这个char数组的截断是否安全?

时间:2015-09-01 15:10:25

标签: c

我正在使用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';
}

如果这不安全,截断空终止字符数组的最后几个字符的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

这是安全的,因为由于if语句,您不会有访问您不拥有的内存的危险。但是,我会将len更改为size_t类型,这是strlen()的返回类型。

此外,我会将if语句更改为if (len >= 2),以便处理只有您要切断的字符出现在buf中的情况。这样,截断的字符串将是一个空字符串(因为字符串终止符将放在位置0)。