【问题标题】:C - Is this truncate of char array safe?C - 这个截断的字符数组安全吗?
【发布时间】:2015-09-01 15:10:24
【问题描述】:

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

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

【问题讨论】:

  • 这是一种非常常见的技术。多字节字符集可能会使其不安全,但您不会使用strlen()
  • 好点。在这种情况下,它不会使用 Unicode。
  • 建议size_t len 而不是int len。也就是strlen()返回的类型。

标签: c


【解决方案1】:

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多